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