91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

2015年Objective-C有哪些新功能?

發布時間:2020-03-03 03:45:50 來源:網絡 閱讀:392 作者:麥佳佳 欄目:移動開發


2015年Objective-C有哪些新功能? 

     雖然68日蘋果WWDC大會之后,所有iOS開發者的眼光都被Swift 2iOS 9吸引了,而iOS開發老語言Objective-C的受歡迎度卻大不如從前。

     雖然iOS開發出了新的swift語言,但是絕大部分老iOS開發從業者及新入門者,都沒有放棄對Objective-C語言的使用和學習。所以蘋果公司在今天也對Objective-C做了一些升級,以往這門語言的使用“局限”將不復存在。下面我們就一起來看下,今年Objective-C語言做了升級。

 

The Setup

iOS開發人員,對下面的代碼一定再熟悉不過了,我們來重溫一下吧:

 

@property(strong, nonatomic) NSArray *someViews;

這絕對符合Objective-C完美主義開發者的標準。對它表示的屬性,不同人有不同觀點。但是,其中仍然存在著一些難以察覺的缺陷。

 

是否可能返回nil

 

除非有現成的文件,或開發者全程都在一旁,否則光憑看是無法獲取信息的。

 

除了UIView之外還有什么?

 

還是那句話——不確定。也許答案是reflection 或許問題可以改成:除了UIView,有可能出現UIView子類嗎?

 

看樣子會出現諸多轉換(casting

 

因為是一隊列……東西,知道那東西是什么之后,經過cast后才能利用。

 

會弱化Swift代碼和可讀性

 

很遺憾,Swift語言支持泛型(generics)就意味著(Objective-C )只會以optionalAnyObject集合的形式出現。如此一來,開發者要使用該屬性就必須在SwiftObjective-C之間進行轉換。

 

NullabilityAnnotations

僅僅是一個屬性就引發了這么多的擔憂,還挺讓人不安的。如果代碼本身引發很多質疑,出現error的可能性就大大增加,更別提在廣為熟知的Objective-C和語言新秀Swift之間相互調用(interoperability)了。現在Objective-C有了nullability annotations這個新功能,問題就簡單多了,也可為編程剩下很多麻煩。

 

intent.

 

現在談到API,(intent.)可能會,也可能不會返回nil,但不管怎樣,終于不用花費數小時來排除漏洞了。以下有三個選項:

 

nullable — ThinkUIView?

nonnull — ThinkUIView

null_unspecified— Think UIView!

再回到實例屬性。假設在運行時迭代這個屬性來創建某個用戶界面,在相應的位置應該有UIButtonUIView

intent.大大提升了Objective-C,而且這個屬性也不會在Swift里滿滿都是optional了。計算機的靜態檢驗和Swift的可用性都得到了提升,最重要的是實現了APIintent通訊。

 

泛型

泛型的缺席一直以來是Objective-C開發者心頭之痛,而在這門語言誕生32年之后,終于也支持泛型了。對于Objective-C來說,支持泛型將帶來諸多改變,而且都是積極的改變。

 

現在可以定義屬性,下指令給編譯器來顯示所有UIView

 

@property(strong, nonatomic, nonnull) NSArray<UIView *> *someViews;

向屬性強加UIView之外的東西時,編譯器會報錯。而且如今不用做大量頭痛的轉換(cast)了。

      雖然Objective-C語言和swift語言看起來像iOS開發平臺兩個對立的語言,但Objective-C支持泛型確實對Swift而言也是好消息。Objective-C上次更新時,讓Swift知道對象不應該是optional的,現在Swift還知道它們是UIViews,如此一來含混不清的AnyObject聲明就不需要了。如今的Objective-C可以像C#C++Swift等語言一樣通過<>括號來表示類型了。雖然通常是對協議表示一致性(conformance),但編譯器知道何時、何地以及如何運用它們,且運用是經過推理的。

 

泛型的強大體現在整個Objective-C之中,可以用參數來表示擴展(extensions)、類別(categories)和類(classes),好處不僅僅體現在集合(collections)上,集合僅僅是結果而已。舉個例子,看看NSDictionary,開發者肯定會偷著樂吧:

 

@interfaceNSDictionary<KeyType, ObjectType> (Lookup)

- (nullableObjectType)objectForKey:(KeyType)aKey;

@end

剛開始知道類型擦除(typeerasure)是為了這個的時候,我有點兒不滿意,但考慮到老舊的Objective-C程序堆積在一起的問題,也就釋懷了。類型擦除(type erasure)不但能實現二進制兼容,而且不改變Objective-C的執行時間。

 

KindOf Types

 

再次調用之前定義的屬性,就會顯示UIView。判斷里面包含著viewsbuttons是再正常不過的事。

 

這種情況下,添加如下代碼會發生什么呢?

 

[self.someViews[0]addTarget:self action:selector(aMethod:)forControlEvents:UIControlEventTouchUpInside];

編譯器警告!

 

這是因為即便可以在這個屬性里插入一個button,就算可以假設是個UIViewbutton也不一定沒有經過轉換。

 

新的KindOf特性能夠輕松解決這種始料未及的情況。我們再回到實例屬性上:

 

@property(strong, nonatomic, nonnull) NSArray<__kindof UIView *> *someViews;

實際上我們已經告訴編譯器:屬性及其集合會出現一些UIView。這樣在類型協議里顯示更多我們之前看不到的信息。其本質向下轉型(downcasting)。

 

這意味著上述代碼編譯沒什么問題,因為編譯器知道集合里肯定會出現一個button

 

雖然不喜歡Swift的人可能會刻意夸大Objective-C的優點,但如今兩種語言實現了互相調用,這是Objective-C所有提升的最大價值所在。毋庸置疑,Objective-C的確比以往更加強大。

 

總結

    雖然swift語言不斷升級、變強,越來越多的iOS開發者開始使用swift語言了,但是還是有絕大部分的人在使用、學習swift的同時,仍在繼續研究Objective-C語言,也還有很多初學者正在糾結到底是學swift還是Objective-C。相信,隨著Objective-C的不斷升級,將讓大家對這兩門語言的選擇上,更加“欲擺不能”。不過這是好事,既然都好,那就讓自己同時駕馭這兩門語言吧。

 

 


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

常德市| 楚雄市| 辛集市| 华池县| 荣成市| 高密市| 米林县| 改则县| 木里| 光山县| 蓝山县| 东明县| 法库县| 两当县| 朝阳县| 新兴县| 长子县| 巧家县| 武邑县| 马关县| 久治县| 安远县| 申扎县| 迁安市| 鸡泽县| 高清| 龙南县| 芜湖县| 喜德县| 商南县| 资中县| 泸州市| 马关县| 汕头市| 土默特左旗| 开封市| 崇礼县| 浪卡子县| 衡东县| 六安市| 双鸭山市|