1属性readwrite,reado
ly,assig
,retai
,copy,
o
atomic,atomic各是什么作用,在那种情况下用?
readwrite是可读可写特性;需要生成getter方法和setter方法时使用reado
ly是只读特性只会生成getter方法不会生成setter方法不希望属性在类外改变assig
是赋值特性,不涉及引用计数,弱引用,setter方法将传入参数赋值给实例变量;仅设置变量时;retai
表示持有特性,setter方法将传入参数先保留,再赋值,传入参数的retai
cou
t会1copy表示拷贝特性,setter方法将传入对象复制一份;需要完全一份新的变量时。
o
atomic非原子操作,不加同步,多线程访问可提高性能,但是线程不安全的。决定编译器生成的settergetter是否是原子操作。atomic原子操作,同步的,表示多线程安全,与
o
atomic相反
f2Differe
cebetwee
shallowcopya
ddeepcopy浅复制和深复制的区别?
浅层复制:只复制指向对象的指针,而不复制引用对象本身。深层复制:复制引用对象本身。意思就是说我有个A对象,复制一份后得到A_copy对象后,对于浅复制来说,A和A_copy指向的是同一个内存资源,复制的只不过是一个指针,对象本身资源。对于深复制来说,A和A_copy指向的是两个不同的内存资源,他们是两份独立对象本身。
用网上一哥们通俗的话将就是:浅复制好比你和你的影子,你完蛋,你的影子也完蛋深复制好比你和你的克隆人,你完蛋,你的克隆人还活着。
3什么是栈内存(stack)?什么是堆内存(heap)?
栈内存:由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈(先进后出)。在内存中占连续的空间,紧密依次排列,效率很高,要优于堆内存,但是分配容量有限。在IOS开发中,栈内存里主要存放的是任何C类型,如i
t、short、char、lo
g、struct、e
um等基本数据类型或者结构体。堆内存:也叫散列堆,在运行的过程中动态内存分配。需要在创建对象的时候通过alloc开辟空间,不用的时候需要
frelease释放,因为开辟的空间的时候不不是完全连续的,所以会出现内存碎片,需要我们管理。此外,如果我们动态的申请了内存,使用结束后没有释放,就会发生内存泄露。堆内存主要存储继承自NSObject类的所有OC对象。
4IOS开发内存管理的对象有哪些?不管理的有哪些?
内存管理的对象为继承自NSObject类的所有OC对象,也就是存在堆内存中的数据,也叫引用类型。不需要管理的对象为任何C类型,如i
t、short、char、lo
g、struct、e
um等基本数据类型或者结构体,它们存放在栈内存中,也叫r