亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

iOS階段學習第21天筆記(ARC內存管理-Copy-代理)

2019-11-14 18:42:06
字體:
來源:轉載
供稿:網友

iOS學習(OC語言)知識點整理

 

一、OC 中的ARC內存管理  

1)ARC中釋放對象的內存原則:看這個對象有沒有強引用指向它  

2)strong:強引用,默認情況下的引用都是強引用  

3) weak:弱引用__weak  

4)ARC環境下:與內存相關的代碼都不能使用了,如果要在ARC環境下使用MRC內存管理代碼 如:

       [super    delloc]  選中項目找到 Build Phases 菜單下的  Compile Sources 項 選中要轉換的.m文件, 

       雙擊寫入此行代碼:-fno-objc-arc  即可  

5)將MRC代碼轉換成ARC代碼 操作:可以在Xcode 左上角Edit 菜單下的Convert中選擇To Objective-C ARC…

      項設置一下即可  

6)如果兩個對象的兩個指針互相引用,會出現對象的內存無法釋放的問題,解決辦法:一端用strong,

      一端用weak, 如果是peroperty中的基本類型用assign  

7)ARC 操作 實例代碼:  

 1 //main.m中的代碼 2 Person *p1=[[Person alloc]init]; 3 //上一個對象沒有強引用指向,內存會被釋放掉 4 p1=[[Person alloc]init]; 5 NSLog(@"********"); 6 //錯誤的寫法,表明有一個弱引用指向對象,這條語句執行完畢后對象就被釋放了 7 __weak Person *p2=[[Person alloc]init]; 8 NSLog(@"+++======="); 9 10 //Person.h中的代碼11 #import <Foundation/Foundation.h>12 @class Card;13 @interface Person : NSObject14 @PRoperty(nonatomic,strong)Card *card;15 @property(nonatomic,strong)NSString *name;16 @property(nonatomic,assign)int age;17 @end18 19 //Card.h中的代碼20 #import <Foundation/Foundation.h>21 #import "Person.h"22 @interface Card : NSObject23 @property(nonatomic,weak)Person *person;24 @end

 

二、copy與mutableCopy介紹  

 1)給字符串發送copy消息,得到的是一個不可變字符串(不管是給可變還是不可變字符串發送的消息)  

 2)給字符串發送mutableCopy消息,得到的是一個可變字符串(不管是給可變還是不可變字符串發送的消息)  

 3)字符串對象的copy操作 實例:

 1 NSString *str1=@"Hello"; 2 NSString *str2=str1; 3 //對不可變字符串發送copy消息會得到一個新的不可變字符串 4 NSString *str3=[str1 copy];  5 // [str3 appendString:@" shanghai"]; 6 //對不可變字符串發送mutableCopy消息后會得到一個新的可變字符串 7 NSMutableString *str4=[str1 mutableCopy]; 8 [str4 appendString:@" beijing"]; 9 NSLog(@"str4:%@",str4);10 NSMutableString *mStr1=[NSMutableString stringWithString:str1];11 //對可變字符串發送copy消息會得到一個新的不可變字符串12 NSString *mStr2=[mStr1 copy];13 //[mStr2 appendString:@"aaa"];14 15 //對可變字符串發送mutableCopy消息會得到一個新的可變字符串對象16 NSMutableString *mStr3=[mStr1 mutableCopy];17 [mStr3 appendString:@"abc"];18 NSLog(@"mStr3=%@",mStr3);

 

4)實現對自定義對象的copy 實例代碼:  

  1、定義一個QFCar 類 .h文件中的代碼如下: 

1 #import <Foundation/Foundation.h> 2 @interface QFCar : NSObject<NSCopying>3 @property(nonatomic,copy)NSString *name;4 @property(nonatomic,assign)int year;5 -(void)print;6 @end

 

 2、.m文件中的代碼如下:

1 #import "QFCar.h"  2 @implementation QFCar 3 //調用copy方法時會執行此協議方法 4 - (id)copyWithZone:(NSZone *)zone 5 { 6     //QFCar *car=[[QFCar allocWithZone:zone]init]; 7    //可以被子類繼承,copy出來的就是子類的對象 8     //[self class]獲取當前的類(對象) 9     QFCar *car=[[[self class] allocWithZone:zone]init];10     car.name=self.name;11     car.year=self.year;12     return car;13 }14 15 -(void)print16 {18     NSLog(@"name is %@, year is %d",_name,_year);19 }20 @end

 

3、main 文件中的實現代碼: 

1 QFCar *mCar=[[QFCar alloc]init];2 NSString *n1=@“寶馬X6”;3 NSMutableString *n=[[NSMutableString alloc]initWithString:n1];4 mCar.name=n;5 mCar.year=2015;6 [mCar print];7 [n appendString:@" kingkong"];8 [mCar print];

 

5)淺拷貝與深拷貝的介紹  

     1、 此兩種拷貝是針對數字或字典集合來說的。  

     2、淺拷貝只拷貝數組對象,兩個數組對象存放的是相同元素的地址,數組中的元素對象并沒有被拷貝   

     3、深拷貝 不僅拷貝數組對象,數組中存放的元素對象也將被拷貝一份新的  

6)深拷貝與淺拷貝實例代碼         

 1 NSMutableArray *carList=[[NSMutableArray alloc]init]; 2 for(int i=0;i<5;i++){ 3 QFCar *car=[[QFCar alloc]init];//自定義的類對象 4 car.name=[NSString stringWithFormat:@“寶馬X%d”,i+1]; 5 car.year=2011+i; 6 [carList addObject:car]; 7 } 8  9  //使用copy(mutableCopy)實現的是數組的淺拷貝(只拷貝數組對象,2個數組對象存放的是相同元素的地址,數組中的元素對象并沒有被拷貝)10 //NSMutableArray *array1=[carList mutableCopy];11 12  //淺拷貝13 NSMutableArray *array1=[[NSMutableArray alloc]initWithArray:carList];14 15 //實現數組的深拷貝(不僅拷貝數組對象,數組中存放的元素對象也將被拷貝一份新的)16 NSMutableArray *array2=[[NSMutableArray alloc]initWithArray:carList copyItems:YES];17 [[array2 lastObject] setName:@"shanghai"];18 for(QFCar *car in array2){19 [car print];20 }21 NSLog(@"***********");22 for(QFCar *car in carList){23 [car print];24 }

 

三、OC 中的代理介紹  

1)代理即自己聲明方法自己不實現讓別的類或對象去實現的一個過程,代理的目的在于降低代碼的耦合性  

2)代理一般都需要有一個協議(protocol)代理方需要遵守協議去實現方法  

3)代理實例代碼  

 1、創建兩個類對象 HeadMaster(校長類) Teacher(教師類) ;教師類代理校長類的examine、

       meeting、travle 三個方法   

  2、HeadMaster.h 文件中的代碼實現如下:  

1 #import <Foundation/Foundation.h>  2 @protocol MasterDelegate<NSObject> 3 -(void)examine; 5 -(void)meeting; 7 -(void)travle; 9 @end11 @interface HeadMaster : NSObject13 @property(nonatomic,strong)id<MasterDelegate> delegate;15 -(void)masterExamine;17 -(void)masterMeeting;19 -(void)masterTravle;21 @end

 

 3、HeadMaster.m 文件中的代碼實現如下: 

 1 #import "HeadMaster.h"  2 @implementation HeadMaster 3 -(void)masterExamine 4 { 5      if([_delegate conformsToProtocol:@protocol(MasterDelegate)]){ 6         if([_delegate respondsToSelector:@selector(examine)]){ 7             [_delegate examine]; 8         } 9     }10 } 12 -(void)masterMeeting13 {14     if([_delegate conformsToProtocol:@protocol(MasterDelegate)]){15         if([_delegate respondsToSelector:@selector(meeting)]){16             [_delegate meeting];17         }18     }19 }20 21 -(void)masterTravle22 {23     if([_delegate conformsToProtocol:@protocol(MasterDelegate)]){24         if([_delegate respondsToSelector:@selector(travle)]){25             [_delegate travle];26         }27     }28 }29 @end

 

 4、Teacher.h文件中的代碼實現如下: 

1 #import <Foundation/Foundation.h>2 #import "HeadMaster.h"3 @interface Teacher : NSObject<MasterDelegate>4 @end

 

 5、Teacher.m 文件中的代碼實現如下: 

 1 #import "Teacher.h" 2 @implementation Teacher 3 -(void)examine 4 { 5     NSLog(@"teacher examine"); 6 } 7  8 -(void)meeting 9 {10     NSLog(@"teacher meeting");11 }12 13 -(void)travle14 {15     NSLog(@"teacher travle");16 }17 @end

 

6、main.m 文件中的(實現調用)代碼 如下: 

 1 #import <Foundation/Foundation.h> 2 #import "Teacher.h" 3 int main(int argc, const char * argv[]) { 4     @autoreleasepool { 5         HeadMaster *master=[[HeadMaster alloc]init]; 6         Teacher *xiaozhang=[[Teacher alloc]init]; 7         master.delegate=xiaozhang; 8         [master masterExamine]; 9         [master masterMeeting];10         [master masterTravle];11     }12     return 0;13 }

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲欧美激情视频| 91影视免费在线观看| 日韩在线视频导航| 国产日韩综合一区二区性色av| 欧美日韩在线视频一区| 国产激情视频一区| 欧美性猛交xxxx乱大交极品| 国产精品高精视频免费| 成人免费看黄网站| 日韩成人中文电影| 亚洲欧洲在线视频| 国产精品一区二区三区毛片淫片| 国产v综合v亚洲欧美久久| 精品毛片三在线观看| 国产视频精品一区二区三区| 亚洲国产另类 国产精品国产免费| 久久综合久中文字幕青草| 欧美精品电影免费在线观看| 国产精品丝袜久久久久久高清| 国产精品观看在线亚洲人成网| 国产精品爽黄69天堂a| 一区二区三区日韩在线| 国产精品6699| 亚洲美女福利视频网站| 亚洲国产97在线精品一区| 性欧美亚洲xxxx乳在线观看| 2018国产精品视频| 欧美大片在线看免费观看| 久久成人精品一区二区三区| 欧美成aaa人片在线观看蜜臀| 亚洲品质视频自拍网| 日韩中文字幕在线视频播放| 91色中文字幕| 在线精品91av| 久久视频在线免费观看| 精品人伦一区二区三区蜜桃网站| 亚洲男人天堂古典| 国产色综合天天综合网| 国产精品天天狠天天看| 国产mv免费观看入口亚洲| 一区二区成人精品| 国产精品第10页| 国产成人+综合亚洲+天堂| 欧美日韩一区二区三区在线免费观看| 一色桃子一区二区| 亚洲国产精品yw在线观看| 精品女厕一区二区三区| 国产suv精品一区二区| 日韩欧美在线中文字幕| 综合国产在线视频| 亚洲欧美资源在线| 日韩av在线免播放器| 亚洲欧美成人精品| 在线观看中文字幕亚洲| 57pao成人永久免费视频| 亚洲欧美中文在线视频| 欧美亚洲午夜视频在线观看| 亚洲黄色在线看| 国产精品第1页| 欧美午夜激情视频| 亚洲国产精品大全| 色无极影院亚洲| 亚洲日韩欧美视频| 欧美精品在线看| 亚洲美女av电影| 日本在线观看天堂男亚洲| 一本色道久久88精品综合| 91极品视频在线| 亚洲国产精品专区久久| 日本午夜精品理论片a级appf发布| 全色精品综合影院| 91黑丝在线观看| 欧美一区二区.| 136fldh精品导航福利| 亚洲成人久久网| 91高清在线免费观看| 亚洲第一色在线| 国产精品亚洲片夜色在线| 国产一区二区久久精品| 国产精品高潮在线| 精品久久久久久久大神国产| 国产91成人在在线播放| 国产精品99久久99久久久二8| 久久精品电影网| 国产不卡av在线| 日韩美女av在线免费观看| 欧美成人精品不卡视频在线观看| 亚洲成**性毛茸茸| 97在线看免费观看视频在线观看| 亚洲人成毛片在线播放| 亚洲成人av片| 日韩美女毛茸茸| 久久成人精品一区二区三区| 91综合免费在线| 亚洲国产成人在线播放| 欧美日本亚洲视频| 国产成人精品av在线| 久久久精品国产网站| 亚洲激情第一页| 国产精品欧美一区二区三区奶水| 日韩av影视在线| 国产成人精彩在线视频九色| 国产精品久久久久久久app| 中文字幕免费国产精品| 国产69精品久久久久久| 国外成人免费在线播放| 亚洲免费影视第一页| 国产精品美女无圣光视频| 国产一区二区日韩精品欧美精品| 亚洲石原莉奈一区二区在线观看| 欧美黄色三级网站| 色综合久久88色综合天天看泰| 久久久久久久久久婷婷| 久久夜色精品国产亚洲aⅴ| 91久久久久久久| 亚洲丝袜在线视频| 久久精品91久久香蕉加勒比| 国产精品爽黄69| 日韩不卡在线观看| 欧美日韩福利视频| 日韩中文字幕网址| 国产精品久久久久久久久久久新郎| yw.139尤物在线精品视频| 夜夜躁日日躁狠狠久久88av| 亚洲精品电影网| 最近2019中文字幕在线高清| 992tv成人免费视频| 国产成人小视频在线观看| 亚洲成人教育av| 亚洲国产精彩中文乱码av在线播放| 亚洲va国产va天堂va久久| 538国产精品视频一区二区| 久久夜色精品国产亚洲aⅴ| 国内精品小视频| 国产精品亚洲视频在线观看| 欧美另类极品videosbestfree| 亚洲人成电影在线观看天堂色| 亚洲精品一区久久久久久| 国产精品久久久久久久久久新婚| 亚洲成avwww人| 91精品国产综合久久香蕉最新版| 久久成人亚洲精品| 亚洲一区二区久久久久久久| 欧美在线视频一区二区| 欧美制服第一页| 91国产精品视频在线| 欧美日韩国产限制| 国语自产偷拍精品视频偷| 日韩精品黄色网| 久久久久国产精品免费| 一本一本久久a久久精品牛牛影视| 亚洲成色www8888| 欧美高清在线视频观看不卡| 日韩在线高清视频| 国产综合在线视频| 91精品国产91久久久久久吃药| 欧美日韩午夜激情| 亚洲第一精品夜夜躁人人躁| 欧美体内谢she精2性欧美| 日韩电影中文字幕av| 精品国产精品三级精品av网址| 在线精品视频视频中文字幕| 国产精品国产三级国产aⅴ浪潮| 亚洲福利视频网|