自动释放池
new .copy.alloc创建的对象不会自动入池,需要用real ease消息释放内存。
通过发送aotorelesase消息,将该对象添加到池中,。最好是手动释放。
例:Time *tme=[[[TIme alloc]init]aoturelease];这个耗费的内存要多。
用release比aoturelease更经济。
可以有多个自动释放池。 对象只放在离他最近的自动释放池里。
对象所有权。
Time *time=[Time alloc]init];
Time *monring;
monring=time;
这块空间有两个所有者。
对象所有者,是指向这块内存指针的个数
对象所有权和对象所有者没有关系。
对象所有权就是计数器的个数。
new .copy.alloc 创建的对象默认的计数器是1.
retai n 也是NSobject里面的函数。retain计数器加1,release 让计数器减1.
计数器默认是1. 代表有一个所有权 time retai n retain计数器加1,所有权加1。
所有权是指向这个内存所有者的个数。
自动释放池的作用是让计数器减1;
retainCount可以获得当前对象的引用计数,返回 NSUInteger 类型。这个不准。
注意:常量字符串 没有引用计数机制(返回-1)。
assign 浅拷贝,copy是深拷贝。 retain.
@property (assign)NSString *str;//assign是浅拷贝。 是默认的,主要用于基本数据类型。
@property (copy) NSString *str;//copy是深拷贝。(主要用于字符串里的)
@property(retain) NSString *str;//retain是引用计数的方式。