您的位置:首页 > 其它

OC——内存管理

2013-10-08 22:37 253 查看
自动释放池

new .copy.alloc创建的对象不会自动入池,需要用real ease消息释放内存。
通过发送aotorelesase消息,将该对象添加到池中,。最好是手动释放。
例:Time *tme=[[[TIme alloc]init]aoturelease];这个耗费的内存要多。
用release比aoturelease更经济。

可以有多个自动释放池。 对象只放在离他最近的自动释放池里。

      一个对象的创建可以通过alloc分配内存或copy复制,这关系到的方法:alloc, allocwithZone :  ,copy ,copyWithZone, mutableCopy ,
mutableCopyWithZone;这些方法都可以使用引用计数为1,retain会使用引用计数加1,release会使引用计数减1.

mutable 可变的。

对象所有权。

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是引用计数的方式。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: