建立乙個person類在.h,宣告屬性
//凡是語義設定使用了retain copy的屬性,其對應的例項變數都需要在dealloc方法裡面release一次
@property (nonatomic ,copy)nsstring *hobby;
@property (nonatomic , retain)nsstring *name;
@property (nonatomic ,retain)nsstring *gender;
@property(nonatomic , assign)int age ;
在person的.m中實現方法
#warning 永遠不要手動呼叫delloc方法!
從寫delloc方法當引用計數為0時自動執行此方法
//-(void)dealloc
//(✨✨✨✨)
//實現copy協議裡的方法
//淺拷貝
//-(id)copywithzone:(nszone *)zone
//深拷貝
-(id)copywithzone:(nszone *)zone
-(void)dealloc
//便利構造器記憶體管理方式
+(id)personwithname:(nsstring *)name
在main主函式中
//+alloc物件的引用計數從0到1
person *p1 = [[person alloc]init];
person *per = [person new];
//retain使物件的引用計數+1
[p1 retain];
[p1 retain];
//autorelease在將來的某一時刻物件的引用計數減1
[p1 autorelease];
//引用計數減1(release)
[p1 release];
[p1 release];
[p1 release];
//retaincount 檢測物件的引用計數(僅對我們定義的類有檢測意義);
//new 物件的引用計數從0到1
nslog(@"%lu",[p1 retaincount]);
nslog(@"%lu",[per retaincount]);
//寫在pool的建立和pool的釋放之間的**會被自動釋放池管理
//當釋放池釋放的時候,池內所有的物件都會將autorelease的釋放操作執行
//自動釋放池以棧的方式來管理當中的物件(先進後出)
//系統的類簇研究深淺拷貝
person *p6 = [[person alloc]init];
person *p7 = [[person alloc]init];
person *p8 = [[person alloc]init];
person *p9 = [[person alloc]init];
//父類指標可以指向子類物件
// nsobject *p = [[person alloc]init];
// //子類指標不允許指向父類物件
// person *_p = [[nsobject alloc]init];
//copy:將原來的物件拷貝乙份,保持原來的特性(不可變物件拷貝完任然為不可變對向,可變仍然為可變物件)
//mutablecopy:將原來的物件進行可變拷貝,無論原來的物件是否可變,拷貝後都是可變物件
//oc中沒有真正意義上的深拷貝.除了歸檔和反歸檔(✨✨✨✨✨✨)
// //1.淺拷貝:不可變陣列copy為不可變陣列
// nsarray *array1 = @[p6,p7,p8,p9];
//
//
// nsarray *_array1 = [array1 copy];
// //深拷貝:不可變陣列拷貝為可變陣列
// nsmutablearray *mutarray = [array1 mutablecopy];
// //2.深拷貝:可變陣列拷貝為可變陣列
// nsmutablearray *mutarray1 = [array1 mutablecopy];
// nslog( @"%p - %p",mutarray1,array1);
//
//
// //3.可變陣列拷貝為可變陣列
// //原來的型別copy後還是什麼型別
// nsmutablearray *_mutarray1 = [mutarray1 copy];
// nslog(@"%p - %p",mutarray1 , _mutarray1);
//
//
//
// //4.可變陣列拷貝為可變陣列
// nsmutablearray *_mutarray2 = [mutarray1 mutablecopy];
person *person = [[person alloc]init];
person *person1 = [person copy];
nslog(@"%@ - %@",person1 ,person);
[person release];
[person1 release];
OC 記憶體管理初級
法則 如果對乙個物件進行了alloc retain copy之後,就擁有了該物件的所有權,就必須對它進行release或者autorelease alloc 引用計數0 1 retain 引用計數 立即 1 copy release 引用計數 立即 1 autorelease 配合 autorele...
OC記憶體管理初級演練
alloc 開闢記憶體空間,並且將物件的引用計數由0變1.person per1 person alloc init 0 1 retaincount 用來獲取當前物件的引用計數 nslog lu per1 retaincount retain 將物件的引用計數加一 person per2 per1 ...
OC記憶體管理的初級理解
自己每開闢一次空間,自己要對其 自己開闢的 進行釋放 對引用計數 1,相應的也要對引用計數 1 不必管系統對空間的操作,系統會對其進行處理.1.能讓引用計數改變的五個方法 1 alloc開闢記憶體空間,將物件的引用計數 1 2 retain將物件的引用計數 1 3 copy 4 release將物件...