大鐘的ios開發之旅(2)————簡單說說ios中ARC與非ARC模式下的property的變數修飾詞

來源:互聯網
上載者:User

標籤: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的變數修飾詞

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.