Cocoa采用引用计数(reference counting)机制,每一个对象有一个关联的“整数retainCount”用于记录对象的使用情况。对象被引用时reataincount+1,外部环境结束对象的使用后retainCount-1,当retain count为0的时候,该对象被销毁。当我们使用alloc、new或者copy的我们需要销毁这个对象。release函数,只是将对象的retainCount值减1,并不是删除对象。当retainCount==0的时候,系统会发给对象一个dell消息,另外:千万不要手动调用dealloc,因为我们不知道何时,何地,何人还会使用该对象。应该老老实实依赖引用计数机制完成内存管理。释放对象所有权的函数除了release还有autorelease,这是一种延迟操作。
如何理解 retain/copy/assign/release/autor release/delloc 关键字?
copy:建立一个索引计数为1的对象,然后释放旧对象,主要用于nsstring;
retain:释放旧对象,将旧对象的值赋予输入对象,再提高输入对象的索引计数为1,对其他NSObject和其子类
assign:简单赋值,不更改索引计数
release:手动释放对象
dealloc:它的作用是,当对象的引用计数为0,系统会自动调用dealloc方法回收内存。
weak 和strong的区别 不同的是,当一个对象不再有strong类型的指针指向它的时候,它会被释放,即使还有weak型指针指向它。weak表示如果还没有人指向它了,它就会被清除内存,同时被指向nil.举个例子:想象我们的对象是一条狗,狗想要跑掉(被释放)。strong型指针就像是拴住的狗。只要你用牵绳挂住狗,狗就不会跑掉。如果5个人牵着一条狗(5个strong型指针指向一个对象),除非5个牵绳都脱落,否则狗是不会跑掉的。weak型指针就像一个小孩指着狗喊到:“看!一只狗在那”,只要狗一只被拴着,小孩就能看到狗,()