那些被遺漏的Objective-C保留字

Steffen Itterheim《Learn Iphone and Ipad Cocos2d Game Development》作者。cocos2d和cocos2d-x現在已成爲著名的遊戲開發引擎。在AppStore上有超過100個遊戲是基於Cocos2D。

 

Steffen Itterheim在他的博客中總結了 Objective-C 2.0 所有的編譯器保留字,並且對這些保留字做了介紹和使用示例。這些保留字如下:
@class
@defs
@protocol @required @optional @end
@interface @public @package @protected @private @property @end
@implementation @synthesize @dynamic @end
@throw @try @catch @finally
@synchronized @autoreleasepool
@selector @encode
@compatibility_alias
@”string”

 

我把這些保留字過了一遍,發現很少用到的有 @dynamic @defs @encode @compatibility_alis,所以就給大家介紹一下這幾個關鍵字吧。


 
@dynamic
@dynamic 是相對於 @synthesize的,它們用樣用於修飾 @property,用於生成對應的的getter和setter方法。但是@ dynamic表示這個成員變量的getter和setter方法並不是直接由編譯器生成,而是手工生成或者運行時生成。

示例如下:
1.@implementation ClassName
2.@synthesize aProperty, bProperty;
3.@synthesize cProperty=instanceVariableName;
4.@dynamic anotherProperty;
5.
6.// method implementations
7.@end


@defs
@defs 用於返回一個Objective-C類的struct結構,這個struct與原Objective-C類具有相同的內存佈局。就象你所知的那樣,Objective-C類可以理解成由基本的C struct加上額外的方法構成。

示例代碼如下:

1.struct { @defs( NSObject) }

 
你可能會想,什麼情況下才會需要使用這個關鍵字。答案是涉及非常底層的操作或優化的時候纔會用到。像如這篇討論Objective-C如何做緩存優化的文章中,就用到了該關鍵字。

 

@encode
@encode 是用於表示一個類型的字符串,對此,蘋果有專門的介紹文檔

示例如下:
1.-(void) aMethod
2.{
3.    char *enc1 = @encode(int);                 // enc1 = "i"
4.    char *enc2 = @encode(id);                  // enc2 = "@"
5.    char *enc3 = @encode(@selector(aMethod));  // enc3 = ":"
6.
7.    // practical example:
8.    CGRect rect = CGRectMake(0, 0, 100, 100);
9.    NSValue *v = [NSValue value:&rect withObjCType:@encode(CGRect)];
10.}


@compatibility_alis
@compatibility_alis 是用於給一個類設置一個別名。這樣就不用重構以前的類文件就可以用新的名字來替代原有名字。

示例如下:
1.@compatibility_alias AliasClassName ExistingClassName


@autoreleasepool
@autoreleasepool 是用於ARC下代替 NSAutoreleasePool的保留字,我把它寫在這裏,是想告訴那些以爲ARC慢的同學,在蘋果的這篇官方文檔中有提到, @autoreleasepool 比 NSAutoreleasePool快6倍。當然,文檔中也提到,ARC下不止Autorelease Pool的實現變快了,retain和release也快很多。如果你還沒有在工程中使用ARC,推薦看看我的《是否應該使用ARC》。

 

Cheat Sheet
有一個熱心者根據他的博文,製作了一張《Objective-C 2.0保留字速查表》,對於新手來說,把這張速查表打印出來,對於熟悉現在的保留字還是很有用的,它的下載地址是:http://maniacdev.com/cheatsheetobjccd.pdf


轉自cocoachina

發佈了12 篇原創文章 · 獲贊 1 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章