黃金法則 retainCount

2021-06-29 08:53:30 字數 3558 閱讀 2046

1.

**法則

//oc

:每個物件建立的同時會自動建立乙個引用計數器.

//檢視引用計數:

retaincount

discussgroup *xiaoming = [[discussgroup

alloc]init];    //alloc

會使物件的引用計數加

1  --> 1 //

檢視物件空間的引用計數

nsuinteger cnt0 = [xiaoming retaincount];

nslog(@"xiaoming +1 

後引用計數

:%lu",cnt0);

//retain:

使計數加1.

//xiaobai

就擁有了物件空間的絕對使用權。

xiaoming

呼叫release

不會影響

xiaobai

對物件的使用。

discussgroup *xiaobai = [xiaoming retain];

//retain

使引用計數加

1 --> 2 //

檢視物件空間的引用計數

nsuinteger cnt1 = [xiaobai retaincount];

nslog(@"xiaobai +1 

後引用計數

:%lu",cnt1);

//retain

之後,xiaohua

也擁有物件空間的絕對使用權

discussgroup *xiaohua = [xiaoming retain];

//retain

使引用計數加

1 --> 3 //

檢視物件空間的引用計數

nsuinteger cnt2 = [xiaohua retaincount];

nslog(@"xiaohua +1 

後引用計數

:%lu",cnt2);

[xiaoming release]; //release

放棄討論組的使用權,會使引用計數減

1 --> 2 //

檢視物件空間的引用計數

nsuinteger cnt3 = [xiaoming retaincount];

nslog(@"xiaoming -1 

後引用計數

:%lu",cnt3);

[xiaobai release];  //release

會使引用計數減

1 --> 1 //

檢視物件空間的引用計數

nsuinteger cnt4 = [xiaobai retaincount];

nslog(@"xiaoming -1 

後引用計數

:%lu",cnt4);

[xiaohua release];  //release

會使引用計數減

1 --> 

物件的引用計數就達到了理論上的

0 --> 

可以釋放

--> 

物件所在類的

dealloc

方法,進行釋放 //

檢視物件空間的引用計數

nsuinteger cnt5 = [xiaoming retaincount];

nslog(@"xiaoming -1 

後引用計數

:%lu",cnt5);

//new: 

相當於alloc+init

,但是在

oc一般不用

new

//        discussgroup *xiao = [discussgroup new];

/* 記憶體管理的**法則: 1.

凡是使用

alloc/new/retain/copy(

包括以copy

開頭的方法

)/mutablecopy(

包括以mutablecopy

開頭的方法

)這五種方法,用完都要進行

release

(這五種方法,會引起物件的引用計數加

1的操作)。 2.

誰建立,誰釋放。

注意:1.

成員變數的釋放操作,放在

dealloc

方法裡執行。

--> 

放在[super dealloc]

這句話之前。 2.

注意指標的轉移,釋放舊物件,建立新物件。 3.

如果從乙個物件(陣列)中取出的元素需要長期使用,要進行

retain

操作。 */

//記憶體管理:確保物件的引用計數跟使用該物件的指標數保持一致,確保物件的引用計數增加的個數和減少的個數的平衡。

//能引起計數加

1的操作

--> alloc new retain copy(copy

開頭的方法

) mutablecopy(mutablecopy

開頭的方法)

//能引起計數減

1的操作

--> release

//autorelease

並不能使物件的引用計數減1.

2.引用計數

nsmutablearray *array=[[nsmutablearray

array] retain];

nsstring *str=[nsstring

stringwithformat:@"test"];

//nslog(@" %@ %d",str,[str retaincount]);//1

[str retain];

// nslog(@"%@ %d",str,[str retaincount]);//2

[array addobject:str];

//nslog(@" %@ %d",str,[str retaincount]);//3

[str retain];

//nslog(@" %@ %d",str,[str retaincount]);//4

[str release];

//nslog(@" %@ %d",str,[str retaincount]);//3

[str release];

//nslog(@" %@ %d",str,[str retaincount]);//2

[array removeallobjects];

nslog(@" %@ %d",str,[str retaincount]);//1 3.

如果用@property宣告不需要寫

如果是settser方法需要寫

.m中//_engine

是乙個類的物件,需要考慮記憶體管理問題

-(void)setengine:(engine *)newengine{

if (_engine != newengine) {

[_engine

release];  //

釋放舊物件

--> 

計數減1

_engine = [newengine retain]; //retain

新物件

兼職的黃金法則!

兼職的 法則!如今的 兼職 環境越來越好。最近幾年,已逐漸向兼職市場 開閘 全國可以兼職人員範圍擴大。2004年,兼職向事業單位員工開放。人事部制訂的政策中明確規定 事業單位工作人員可兼薪兼職。這意味著兼職物件範圍比以往有所擴大,無論是科技人員還是事業單位工作人員都可以從事兼職活動。但兼職必須做到以...

記憶體管理 黃金法則

1 記憶體管理 法則 如果對乙個物件使用了alloc mutable copy retain,那麼你必須使用相應的release或者autorelease。型別定義 基本型別 任何c的型別,如 int short char long struct enum union等屬於基本型別或者結構體 記憶體...

攝影黃金12法則

陽光16法則。這條基本法則適合於在白天拍攝明亮的 照明均勻的場景,即用光圈為f16,快門速度用感光度指數的倒數,例如光圈f16,感光度為iso100,快門速度可以選擇1 100秒。在此基礎上,如果在海灘上拍攝可以將光圈縮小到f22,如果遇到多雲天氣可以將光圈放大到f11,以此類推。月亮11 8和5....