日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Xcode 4.4 的新特性 | LLVM 4.0 的新语法

發(fā)布時(shí)間:2024/4/17 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Xcode 4.4 的新特性 | LLVM 4.0 的新语法 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

WWDC 2012蘋果全球開發(fā)者大會(huì)上,蘋果針對(duì)LLVM編譯器都做了重大改進(jìn),新版的Xcode 4.4中的LLVM編譯器升級(jí)到了4.0,給Objective-C帶來(lái)了很多令人驚喜的特性。

注意,下面的語(yǔ)法需要下載Xcode 4.4。

1、枚舉類型的改變

老寫法:

?

[cpp]?view plaincopy
  • typedef?enum?Week{??
  • ????Moday,??
  • ????Tuesday,??
  • ????Wednesday,??
  • ????Thursday,??
  • ????Friday,??
  • ????Saturday,??
  • ????Sunday??????
  • }Week;??
  • 老方法的問(wèn)題是枚舉值的數(shù)據(jù)范圍是模糊的,這個(gè)數(shù)值可能非常大,可能是負(fù)數(shù),無(wú)法界定

    ?


    新寫法:

    ?

    [cpp]?view plaincopy
  • typedef?enum?Week:NSUInteger{??
  • ????Moday,??
  • ????Tuesday,??
  • ????Wednesday,??
  • ????Thursday,??
  • ????Friday,??
  • ????Saturday,??
  • ????Sunday??????
  • }Week;??
  • 新方法在列出枚舉內(nèi)容的同時(shí)綁定了枚舉數(shù)據(jù)類型NSUInteger,這樣帶來(lái)的好處是增強(qiáng)的類型檢查和更好的代碼可讀性。

    ?

    2、使用的方法代碼放置的位置順序無(wú)關(guān)

    沒在.h文件中聲明的方法,在時(shí)候的時(shí)候如果方法不在前面,可能會(huì)有警告。

    比如:

    ?

    [cpp]?view plaincopy
  • @interface?MyClass?:?NSObject??
  • -(void)doSomething:(NSString?*)?print;??
  • @end??

  • 實(shí)現(xiàn):

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

  • 早期編譯器編譯時(shí)會(huì)出現(xiàn):warning: instance method ‘-getString:’ not found…

    ?

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

    3、property屬性簡(jiǎn)化

    ?

    @property對(duì)于使用Objective-C的程序員來(lái)說(shuō)是相當(dāng)熟悉的,property方便自動(dòng)生成變量的getter 和setter。在.h文件中聲明之后,還要在.m文件中加上@synthesize關(guān)鍵字,這樣才能完成自動(dòng)getter 和setter的過(guò)程。

    比如說(shuō),我在.h文件中寫了

    ?

    @property?(strong,?nonatomic)?NSDictionary?*order;

    我還要去對(duì)于的.m文件中寫上

    ?

    @synthesize?order;

    是不是感覺很多余啊?現(xiàn)在在語(yǔ)法新特性中不用寫這行代碼了,新版的編譯器幫你實(shí)現(xiàn)這行代碼,這叫幫人幫到底。

    也是說(shuō),你在.h文件中聲明order屬性后,就可以直接在實(shí)現(xiàn)文件中使用該屬性的getter和setter方法,編譯器還會(huì)根據(jù)屬性的可讀和可寫自動(dòng)判斷是否提供setter方法。智能多了。

    4、語(yǔ)法的簡(jiǎn)化

    做過(guò)java 或C#開發(fā)的都知道,初始化或賦值一個(gè)變量一般用一個(gè)“=”號(hào)就搞定了,到了Objective-C后,每次都要用一個(gè)很長(zhǎng)的函數(shù)才能賦值活初始化。現(xiàn)在簡(jiǎn)化多了。

    咱們看看各個(gè)數(shù)據(jù)類型簡(jiǎn)化前后的對(duì)比。

    4.1、NSNumber 類型

    老寫法:

    ?

    [cpp]?view plaincopy
  • 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];??
  • ?

    新寫法:

    ?

    [cpp]?view plaincopy
  • NSNumber?*number;??
  • number?=?@'X';??
  • number?=?@12345;??
  • number?=?@12345ul;??
  • number?=?@12345ll;??
  • number?=?@123.45f;??
  • number?=?@123.45;??
  • number?=?@YES;??
  • ?

    4.2、NSArray類型

    老寫法:

    ?

    [cpp]?view plaincopy
  • NSArray?*array;??
  • array?=?[NSArray?arrayWithObjects:@"object1",?@"object2",?@"object3",?nil];??

  • 新寫法:

    ?

    ?

    [cpp]?view plaincopy
  • NSArray?*array?=?@[?@"object1",?@"object2",?@"object3"?];??

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

    ?

    4.3、NSDictionary類型

    老寫法

    [cpp]?view plaincopy
  • NSDictionary?*dict?=?[NSDictionary?dictionaryWithObjects:@[@"value1",?@"value2",?@"value3"]??
  • ???????????????????????????????????forKeys:@[@"key1",?@"key2",?@"key3"]];??
  • 新寫法

    ?

    ?

    [cpp]?view plaincopy
  • NSDictionary?*dict?=?@{@"key1":?@"value1",@"key2":?@"value2",@"key3":?@"value3"?};??
  • NSLog(@"%@",?dict);??
  • ?

    運(yùn)行結(jié)果正常:

    {

    ? ? key1 = value1;

    ? ? key2 = value2;

    ? ? key3 = value3;

    }

    5、快速通過(guò)下標(biāo)定位對(duì)象

    他們說(shuō)新的語(yǔ)法這樣是可以的,數(shù)組和字典都可以通過(guò)下標(biāo)訪問(wèn),

    ?

    [cpp]?view plaincopy
  • NSArray?*array?=@[?@"object1",?@"object2",?@"object3"?];??
  • ??
  • id?obj?=?array[0];?//通過(guò)下標(biāo)方式獲取數(shù)組對(duì)象,替換原有寫法:array?objectAtIndex:i];??
  • NSString?*obj1??=?@"oooo";??
  • array[0]??=?obj1;?//也可以直接為數(shù)組對(duì)象賦值。替換原有寫法:[array?replaceObjectAtIndex:i?withObject:newObj];??
  • ??
  • NSDictionary?*dict?=?@{@"key1":?@"value1",@"key2":?@"value2",@"key3":?@"value3"?};??
  • id?obj2?=?dict[@"key1"];//獲取o2對(duì)象,替換原有寫法:[dic?objectForKey:k2];??
  • dict[@"key2"]?=?obj;??//重新為鍵為k2的對(duì)象賦值,替換原有寫法:[dic?setObject:newObj?forKey:k2]??
  • 可是事實(shí)是這樣的:

    ?


    現(xiàn)實(shí)總是殘忍的。于是google 了一下,發(fā)現(xiàn)這個(gè)語(yǔ)法是針對(duì)iOS 6 or OS X 10.8 SDKs的,我沒有ios 6模擬器而已沒有10.8 SDKs。所以報(bào)錯(cuò)了。可以參考這里:http://stackoverflow.com/questions/11425976/compiler-error-expected-method-not-found-when-using-subscript-on-nsarray

    下面是WWDC 2012視頻的一些關(guān)于新語(yǔ)法特性的截圖:

    截圖可以給你解釋,新的語(yǔ)法特性編譯器是怎么實(shí)現(xiàn)的。

    轉(zhuǎn)載于:https://www.cnblogs.com/easonoutlook/archive/2013/05/30/3108091.html

    總結(jié)

    以上是生活随笔為你收集整理的Xcode 4.4 的新特性 | LLVM 4.0 的新语法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。