自動引用技術

2021-09-30 12:39:38 字數 1461 閱讀 9486

生成並持有物件-alloc,new,copy,mutablecopy等方法

持有物件-retain方法

釋放物件-release方法

廢棄物件-dealloc方法

自己生成的物件,自己持有

使用alloc、new、copy、mutablecopy名稱開頭的方法名意味著自己生成的物件只有自己持有。

使用nsobject類的alloc類方法,new類方法能自己生成並持有物件。

allocmyobject、newthatobject、copythis、mutablecopyyourobject這樣的方法,也意味著自己生成並持有物件。

id obj = [nsobject new];

id obj = [[nsobject alloc] init];

非自己生成的物件,自己也能持有

因為非自己生成並持有,所以自己不是該物件的持有者。使用retain方法,使非自己生成的物件跟用alloc、new、copy、mutablecopy方法生成並持有的物件一樣,成為了自己所持有的。

id obj = [nsmutablearray array];

//取得的物件存在,但自己不持有物件。

[obj retain];

不再需要自己持有的物件時釋放

自己持有的物件,一旦不再需要,持有者有義務釋放該物件。釋放使用release方法。用alloc方法由自己生成並持有的物件就通過release方法釋放了。使用retain方法持有的物件,也同樣可以用release方法釋放。

id obj = [nsobject new];

[obj release];

id obj = [nsmutablearray array];

[obj retain];

[obj release];-(id) allocobject

id obj1 = [obj0 allocobject];

//自己生成持有物件 allocobject

-(id) object

id obj1 = [obj0 object];
//取得的物件存在,但自己不吃油物件
[obj1 retain];
//自己持有物件

autorelease方法,可以使取得的物件存在,但自己不持有物件。autorelease提供這樣的功能,使物件在超出制定的生存範圍時能夠自動並正確地釋放(呼叫release方法)。

非自己持有的物件無法釋放

自動引用計數

每當你產生乙個物件,arc分配一大塊控制項去儲存這個物件。除此之外,當乙個物件是不在需要,arc 將會收回這個例項物件所佔的空間。如果乙個物件的空間被釋放掉,但是你任然通過物件的引用呼叫方法或者屬性,你的程式將要崩潰。為了不讓物件被釋放掉 arc將會追蹤有多少屬性 常量 變數正在引用這個物件。只要有...

自動引用計數

使用弱引用解決迴圈強引用 如果兩個變數屬性都可以設定為nil,那麼就用弱引用來設定其中乙個屬性來解決迴圈強引用。class person weak var apartment apartment?deinit class apartment deinit var aperson person?per...

ARC(自動引用計數)

arc arc是automatic reference counting 自動引用計數 的縮寫,是ios5一同推出的新特性,但是ios4.3也支援arc,只是不能使用weak。使用arc,不需要再retain release autorelease,因為編譯器會在合適的地方自動的插入retain r...