標籤:android style blog http io color ar os 使用
/********************************************************************************************
* author:[email protected]大鐘
* E-mail:[email protected]
*site:http://www.idealpwr.com/
*深圳市動力思維科技發展有限公司
* http://blog.csdn.net/conowen
* 註:本文為原創,僅作為學習交流使用,轉載請標明作者及出處。
********************************************************************************************/
一、前言
ios開發中,@property的修飾就有很多的修飾詞,如retain、assign、strong、weak、nonatomic等等,而這些修飾詞在ARC模式下與非ARC模式下也是略有不同。下面先簡單說說ARC模式
二、什麼是ARC
ARC是iOS 5推出的新功能,全稱為Automatic Reference Counting。一句話說,就是代碼中自動加入了retain與release,原來需要手動去管理引用計數和手動釋放計數的操作,編譯器已經可以自動完成了。對於我這些從Android開發轉到ios開發的人來說,真是極好的,不用操心記憶體的管理,也不用擔心記憶體泄露。
三、開啟ARC的支援
1、使用xcode 6.1以上建立的工程,預設就是開啟了ARC的支援
2、ARC與非ARC的混編
由於項目的需要,可能會使用一些非ARC的第三方庫,通過以下設定,可以讓項目同時相容ARC與非ARC模式。
非ARC的話,代碼後面加一個編譯選項:-fno-objc-arc
ARC的話,代碼後面加一個編譯選項:-fobjc-arc
也可以把非ARC的代碼轉換為ARC類型的代碼,其實就是把一些手動的retain與release代碼去掉。
四、retain、assign、strong、weak、nonatomic的簡單區別
1、ARC模式
一般來說ARC模式下的property變數修飾詞為strong、weak,相當於非ARC模式下的retain、assign,
strong :代替retain。
weak:代替assign,但是比assign多一個功能,指標指向的地址被釋放之後,指標本身也會自動被釋放。
e.g.
XX.h
@property (strong,nonatomic)NSString *str1;@property (weak,nonatomic)NSString *str2;
XX.m
@synthesize str1;@synthesize str2;
- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. str1=[NSMutableString stringWithString:@"str1"]; NSLog(@"str1=%p",str1); str2=str1; str1=nil; NSLog(@"str2=%@",str2); NSLog(@"str2=%p",str2); }
log mesg:用了weak,自動釋放指標,不會導致野指標。
2014-11-04 17:37:59.763 Helloworld[1184:426997] str1=0x15d6a4202014-11-04 17:37:59.767 Helloworld[1184:426997] str2=(null)2014-11-04 17:37:59.768 Helloworld[1184:426997] str2=0x0
若是做以下更改
XX.h
@property (strong,nonatomic)NSString *str1;@property (strong,nonatomic)NSString *str2;
log mesg:
2014-11-04 17:40:52.137 Helloworld[1191:427491] str1=0x14522b902014-11-04 17:40:52.139 Helloworld[1191:427491] str2=str12014-11-04 17:40:52.140 Helloworld[1191:427491] str2=0x14522b90
(野指標:指標指向的地址被釋放,指標本身沒有釋放,這就是野指標)
2、非ARC模式
retain:當變數為指標類型的時候,需要retain修飾,使用setter方法(賦值)的時候,引用級數增加1。
assign:修飾非指標類型和id類型的變數,如NSInteger,CGFloat,或者delegate
3、通用模式
atomic:原子性,保證多安全執行緒。防止變數在寫未完成的時候被另外一個線程讀取,造成資料錯誤,但是會耗費一定的系統資源。
nonatomic:非原子性,禁止多線程,保護變數。沒有使用多線程間的通訊編程,nonatomic可以提高系統效能。
copy:變數的內容拷貝,相對retain,retain是指標拷貝。
大鐘的ios開發之旅(2)————簡單說說ios中ARC與非ARC模式下的property的變數修飾詞