问题:定义属性时,什么情况使用copy、assign、retain?
使用对象:
assign:简单的数据类型,如NSInteger,double等。
copy :一般针对NSString
retain : NSObject和它的子类。
计数器:
assign : 简单赋值,计数器不变
copy : 计数器+1,释放旧对象。
retain : 计数器+1,释放旧对象,并把旧对象的值赋予新对象。
总结:
assign是简单的赋值,最好区分了。而copy则是内容拷贝,retain是指针拷贝。怎么理解呢?
内存上,copy会多开拓一块相同的内存,指针各自指向各自的内存,retian是多个指针指向同一块内存。
×有时间再补充代码截图
问题:对象是什么时候被release的?
毫无疑问的回答是,只有对象的引用计数器为0的时候,对象才会被销毁。
补充autorelease.
其实autorelease=延迟销毁。对于每一个autorelease,其实只是把该对象放入了自动释放池Autorelease pool 中,当pool 销毁的时候,里面的对象也会跟着调用release,销毁自己。
问题:iOS有没有垃圾回收?
IOS是没有垃圾回收机制的,即使IOS5以后出现的ARC也不是真正的垃圾回收机制。只是编译器会在适当的地方自动帮我们加入retain,release等语句。
想详细了解可以查看MJ大神的博客。