Xcode 4.4中LLVM compiler 4.0帶來的Objective-C新文法特性

來源:互聯網
上載者:User
文章目錄
  • 4.1、NSNumber 類型
  • 4.2、NSArray類型

今年WWDC 2012蘋果全球開發人員大會上,蘋果針對LLVM編譯器都做了重大改進,新版的Xcode 4.4中的LLVM編譯器升級到了4.0,給Objective-C帶來了很多令人驚喜的特性。

注意,下面的文法需要下載Xcode 4.4。

1、枚舉類型的改變

老寫法:

typedef enum Week{    Moday,    Tuesday,    Wednesday,    Thursday,    Friday,    Saturday,    Sunday    }Week;

老方法的問題是枚舉值的資料範圍是模糊的,這個數值可能非常大,可能是負數,無法界定

新寫法:

typedef enum Week:NSUInteger{    Moday,    Tuesday,    Wednesday,    Thursday,    Friday,    Saturday,    Sunday    }Week;

新方法在列出枚舉內容的同時綁定了列舉資料型別NSUInteger,這樣帶來的好處是增強類型檢查和更好的代碼可讀性。

2、使用的方法代碼放置的位置順序無關

沒在.h檔案中聲明的方法,在時候的時候如果方法不在前面,可能會有警告。

比如:

@interface MyClass : NSObject-(void)doSomething:(NSString *) print;@end

實現:

@implementation MyClass-(void)doSomething:(NSString *)print{    NSLog(@"%@", [print stringByAppendingFormat:[self getString]]);}-(NSString *)getString{    return@"string for something";}@end

早期編譯器編譯時間會出現:warning: instance method ‘-getString:’ not found…

新的編譯器會先掃描碼中的方法,然後再編譯,這樣就避免了找不到方法這種情況了

3、property屬性簡化

@property對於使用Objective-C的程式員來說是相當熟悉的,property方便自動產生變數的getter 和setter。在.h檔案中聲明之後,還要在.m檔案中加上@synthesize關鍵字,這樣才能完成自動getter 和setter的過程。

比如說,我在.h檔案中寫了

@property (strong, nonatomic) NSDictionary *order;

我還要去對於的.m檔案中寫上

@synthesize order;

是不是感覺很多餘啊?現在在文法新特性中不用寫這行代碼了,新版的編譯器幫你實現這行代碼,這叫幫人幫到底。

也是說,你在.h檔案中聲明order屬性後,就可以直接在實現檔案中使用該屬性的getter和setter方法,編譯器還會根據屬性的可讀和可寫自動判斷是否提供setter方法。智能多了。

4、文法的簡化

做過java 或C#開發的都知道,初始化或賦值一個變數一般用一個“=”號就搞定了,到了Objective-C後,每次都要用一個很長的函數才能賦值活初始化。現在簡化多了。

咱們看看各個資料類型簡化前後的對比。

4.1、NSNumber 類型

老寫法:

    NSNumber *number;    number = [NSNumber numberWithChar:'X'];    number = [NSNumber numberWithInt:12345];    number = [NSNumber numberWithUnsignedLong:12345ul];    number = [NSNumber numberWithLongLong:12345ll];    number = [NSNumber numberWithFloat:123.45f];    number = [NSNumber numberWithDouble:123.45];    number = [NSNumber numberWithBool:YES];

新寫法:

    NSNumber *number;    number = @'X';    number = @12345;    number = @12345ul;    number = @12345ll;    number = @123.45f;    number = @123.45;    number = @YES;

4.2、NSArray類型

老寫法:

    NSArray *array;    array = [NSArray arrayWithObjects:@"object1", @"object2", @"object3", nil];

新寫法:

    NSArray *array = @[ @"object1", @"object2", @"object3" ];

新的寫法去掉了後面討厭的nil。

4.3、NSDictionary類型

老寫法

    NSDictionary *dict = [NSDictionary dictionaryWithObjects:@[@"value1", @"value2", @"value3"]                                       forKeys:@[@"key1", @"key2", @"key3"]];

新寫法

    NSDictionary *dict = @{@"key1": @"value1",@"key2": @"value2",@"key3": @"value3" };    NSLog(@"%@", dict);

運行結果正常:

{

    key1 = value1;

    key2 = value2;

    key3 = value3;

}

5、快速通過下標定位對象

他們說新的文法這樣是可以的,數組和字典都可以通過下標訪問,

    NSArray *array =@[ @"object1", @"object2", @"object3" ];    id obj = array[0]; //通過下標方式擷取數組對象,替換原有寫法:array objectAtIndex:i];    NSString *obj1  = @"oooo";    array[0]  = obj1; //也可以直接為數組對象賦值。替換原有寫法:[array replaceObjectAtIndex:i withObject:newObj];        NSDictionary *dict = @{@"key1": @"value1",@"key2": @"value2",@"key3": @"value3" };    id obj2 = dict[@"key1"];//擷取o2對象,替換原有寫法:[dic objectForKey:k2];    dict[@"key2"] = obj;  //重新為鍵為k2的對象賦值,替換原有寫法:[dic setObject:newObj forKey:k2]

可是事實是這樣的:


現實總是殘忍的。於是google 了一下,發現這個文法是針對iOS 6 or OS X 10.8 SDKs的,我沒有ios 6模擬器而已沒有10.8 SDKs。所以報錯了。可以參考這裡:http://stackoverflow.com/questions/11425976/compiler-error-expected-method-not-found-when-using-subscript-on-nsarray

下面是WWDC 2012視頻的一些關於新文法特性的:

可以給你解釋,新的文法特性編譯器是怎麼實現的。

著作權聲明:本文由http://blog.csdn.net/totogo2010/原創,歡迎轉載分享。請尊重作者勞動,轉載時保留該聲明和作者部落格連結,謝謝!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.