成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

了解Xcode 4.2中Automatic Reference Counting(ARC)

移動開發 iOS
本文介紹的是來了解Xcode 4.2中Automatic Reference Counting特性和使用方法,詳細的介紹了ARC的特性,來看詳細內容。

了解Xcode 4.2中Automatic Reference Counting (ARC)是本文要講解的內容,Automatic Reference Counting (ARC),自動引用計數,是開發Cocoa程序時的一個編譯級別的特性,用于自動內存管理。

XCode 4.2中,使用模板新建一個工程,該工程將使用ARC特性。

如果你的iOS SDK是iOS5 seed release 2,需要做如下修改,才能避免編譯時的錯誤:

  1. System/Library/Frameworks/CoreFoundation.framework /Headers/CFBase.h   
  2. ,將:   
  3. CFTypeRef CFMakeCollectable(CFTypeRef cf) CF_AUTOMATED_REFCOUNT_UNAVAILABLE;  

修改成:

  1. CFTypeRef CFMakeCollectable(CFTypeRef cf);   
  2.  
  3. 在System/Library/Frameworks/Foundation.framework/Hea ders/NSObject.h中,將: 
  4.  
  5. return (__bridge_retain CFTypeRef)X;  

修改成:

  1.   return (__bridge_retained CFTypeRef)X;  

使用ARC將讓你遠離煩人且容易遺漏的retain,release和autorelease等操作。

ARC的工作原理是,在你編譯程序時,將內存操作的代碼(retain,release或autorelease)自動添加到需要的位置。即底層上使用和Manual Reference Counting(手工引用計數)一樣的內存管理機制,但由于XCode自動幫你在編譯時添加內存操作的代碼,從而簡化了編程的工作。

啟用ARC,編譯選項中需加上-fobjc-arc,不過這個由XCode在創建工程模板時幫你完成。

XCode 4.2以前版本都不支持ARC。

對操作系統也有要求:Mac OS X v10.6或v10.7 (64-bit applications),iOS4或iOS5。注意:其中Mac OS X v10.6和iOS4不支持weak references(弱引用,后面會說明什么是weak references)。

Xcode 4.2提供了一個名為“Convert to Objective-C Automatic Reference Counting”的工具,在Edit->Convert menu下,可以幫你自動將使用Manual Reference Counting的老代碼轉換成使用ARC的新代碼(例如去掉對retain和release的調用)。

一個使用ARC的代碼例子:

  1.   @interface Person : NSObject   
  2.   @property (nonatomic, strong) NSString *firstName;   
  3.   @property (nonatomic, strong) NSString *lastName;   
  4.   @property (nonatomic, strong) NSNumber *yearOfBirth;   
  5.   @property (nonatomic, strong) Person *spouse;   
  6.   @end   
  7.   @implementation Person   
  8.   @synthesize firstName, lastName, yearOfBirth, spouse; @end  

注意:不再需要重載dealloc函數,因為沒有release操作。(strong的語義后面會介紹。)

例子2:

  1. (void)contrived { Person *aPerson = [[Person alloc] init];   
  2. [aPerson setFirstName:@"William"];   
  3. [aPerson setLastName:@"Dudney"];  
  4.  [aPerson:setYearOfBirth:[[NSNumber alloc] initWithInteger:2011]];  
  5.  NSLog(@"aPerson: %@", aPerson);   
  6. }  

注意:沒有了release操作。

例子3: (void)takeLastNameFrom:(Person *)person { NSString *oldLastname = [self lastName]; [self setLastName:[person lastName]]; NSLog(@"Lastname changed from %@ to %@", oldLastname, [self lastName]); } 注意:ARC會保證oldLastname引用的對象在NSLog執行結束之前,不會被釋放掉。
使用ARC的一些規則: 不能直接調用dealloc方法,不能重載或直接調用retain,release,retainCount,或autorelease等方法。

但可以通過@selector(retain),@selector(release)這樣的形式調用。

用戶自定義的dealloc方法,不能調用[super dealloc],編譯器會自動幫你添加這個代碼。

對Core Foundation-style的對象,仍可以使用CFRetain, CFRelease等方法。 不能使用NSAllocateObject或NSDeallocateObject去創建對象,請使用alloc方法。 在c語言中的結構體中,不能再使用對象指針。請放棄C結構體,使用Objective-C的類。 id和void*之間沒有隱式的類型轉換,請使用顯式類型轉換。 不能使用NSAutoreleasePool,ARC提供了@autoreleasepool語句塊。

例如:

  1. @autoreleasepool {   
  2. // Code, such as a loop that creates a large number of temporary objects.   
  3. }  

不能使用NSZone。 方法和變量的命名不能以“new”開頭。 關于對象的生命周期: weak引用:設置成weak的屬性,不會影響對象的生命周期,如果引用的對象已經被釋放,引用會指向nil。 strong引用:設置成strong的屬性,會影響對象的生命周期。 例如:

  1.   @property(strong) MyClass *myObject; 和@property(retain) MyClass *myObject;是等效的。  

又例如:

  1.   @property(weak) MyClass *myObject;和@property(assign) MyClass *myObject; 

在多數情況下等效,但當instance被釋放時,設置為weak的引用會指向nil。

可用的限定詞: __strong, 默認的 __weak __unsafe_unretained,和weak的區別是當對象被釋放時,引用不指向nil。 __autoreleasing,當方法的參數是id*,且希望方法返回時對象被autoreleased,可以添加__autoreleasing限定詞。 使用__weak時要特別小心,例如

  1. NSString __weak *string = [[NSString alloc] initWithFormat:@"First Name: %@", [self firstName]];   
  2. NSLog(@"string: %@", string); //此時string為空,因為weak類型不影響對象的生命周期,對象剛創建就釋放了。  

其他特性: 使用strong, weak, autoreleasing限定的變量會被隱式初始化為nil。

例如:

  1.   - (void)myMethod { NSString *name; NSLog(@"name: %@", name); //會輸出null   
  2.   }  

歡迎大家補充和找bug。

小結:了解Xcode 4.2中Automatic Reference Counting (ARC)的內容介紹完了,希望通過本文的學習,能對你有所幫助!

原文地址:http://blog.sina.com.cn/s/blog_4c4c79950100t3uy.html

責任編輯:zhaolei 來源: 陳成的博客
相關推薦

2013-04-15 10:48:16

Xcode ARC詳解iOS ARC使用

2011-07-29 13:40:00

Xcode iOS 4.2 iPhone

2011-08-04 17:19:49

iPhone開發 Xcode 文檔

2013-02-25 13:00:14

iOS開發xcode

2011-10-31 14:44:49

2011-03-18 08:39:28

iOS 4.2 SDKiOS SDK

2011-08-01 16:39:21

Xcode 目錄結構

2011-07-29 16:48:04

iPhone SDK Xcode

2011-07-20 10:59:46

2011-07-07 09:20:30

Xcode

2023-10-05 06:02:52

計數排序Counting

2011-08-09 15:44:11

XCode 4Plist文件

2010-05-26 18:05:13

2011-07-25 15:54:08

XCode PHP

2012-07-09 10:22:28

Mono for An

2014-12-10 10:10:00

藍牙4.2

2013-04-15 10:59:08

iOS開發ARC版本說明

2015-08-07 11:07:21

IOS9code covera每天積累一點

2014-12-12 10:25:21

Xcode 6iOS快速上手

2011-07-19 17:49:10

Xcode Xcode4 Frameworks
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日本不卡一区二区三区 | 日本不卡免费新一二三区 | 人人干免费 | 日韩精品极品视频在线观看免费 | 日韩精品视频在线观看一区二区三区 | 欧美激情一区二区三级高清视频 | 超碰3| 久操伊人 | 亚洲国产精品久久久久婷婷老年 | 亚洲精品久久久久久久久久久久久 | 久久99视频免费观看 | 午夜视频网站 | 国产小视频在线 | 精品国产一区二区三区在线观看 | 亚洲欧美日韩中文字幕一区二区三区 | 精品久久久久久久久亚洲 | av黄色在线观看 | 一区二区三区四区免费在线观看 | 91免费福利在线 | 亚洲资源站 | 国产探花 | 精品国产鲁一鲁一区二区张丽 | 亚洲成人精品久久久 | 欧美成年黄网站色视频 | 久久久久久黄 | 美女久久久久久久 | 久久人人爽人人爽人人片av免费 | 在线观看亚洲精品 | 久久亚洲91| 午夜精品久久久久久久久久久久久 | 亚洲社区在线 | av国产在线观看 | 久久激情视频 | 久久久免费少妇高潮毛片 | 精品欧美一区二区中文字幕视频 | 超碰最新在线 | 亚洲 欧美 另类 综合 偷拍 | 国产亚洲一级 | 免费中文字幕 | 国产激情一区二区三区 | 国产ts人妖一区二区三区 |