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....