精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Objective-C 語言的命名空間詳解

移動開發 iOS
就像父母要向孩子解釋“什么是死亡”或者“圣誕老人是不存在的”問題一樣,父母總是寄希望時間會讓孩子自己找到答案。為什么Objecive-C中的很多類名都是NS開頭的呢?實際上NS代表了NeXTSTEP。

“為什么Objecive-C中的很多類名都是NS開頭的呢?”

我保證在你第一次給別人介紹Objective-C的時候肯定會聽到這句話。

就像父母要向孩子解釋“什么是死亡”或者“圣誕老人是不存在的”問題一樣,父母總是寄希望時間會讓孩子自己找到答案。

你既然這么問了,實際上NS代表了NeXTSTEP (好吧,其實是代表NeXTSTEP/Sun,我們只是做個簡單的介紹),它被用于…

你越解釋,你會發現對方越失望,接下來,他們不在只是隨便問問了,他們開始問一些你更難解釋的問題–在Objective-C中@是什么?

命名一直是Objective-C的硬傷,和那些優雅的語言相比,Objective-C缺乏標識符容器這點引來了很多不切實際的批評家。

他們總是說:Objective-C不像其他流行語言一樣提供模塊化機制來避免類名和方法名的沖突。

相反地,Objective-C 依靠前綴來確保APP中的一些地方的方法名不會影響其他的地方有相同名字的代碼。

插入一個關于類型系統的題外話之后我們會繼續進入關于命名的討論。

C和Objective-C中的類型

我曾在這博客上多次提過,Objective-C是直接建立在C語言之上的,一個重要的原因是Objective-C和C語言共用一個類型系統,他們都要求標識符是全局唯一的。

你可以自己定義一個和@interface同名的靜態變量,編譯之后你會得到一個錯誤:

  1. @interface XXObject : NSObject 
  2. @end 
  3.   
  4. static char * XXObject;//將“XXObject”重新定義為不同的符號 

也就是說,Objective-C的runtime在C語言的類型系統上又創建了一個抽象層,它甚至可以允許下面這段代碼被編譯:

  1. @protocol Foo 
  2. @end 
  3.   
  4. @interface Foo : NSObject <Foo 
  5.     id Foo 
  6.   
  7. @property id Foo; 
  8. + (id)Foo; 
  9. - (id)Foo; 
  10. @end 
  11.   
  12. @interface Foo (Foo) 
  13. @end 
  14.   
  15. @implementation Foo 
  16. @synthesize Foo; 
  17.   
  18. + (id)Fo 
  19.     id Foo = @"Fo 
  20.     return Foo 
  21. @end 

通過Objective-C的環境,程序能區別所有相同名字的類,協議,類別,實例變量,實例方法和類方法。

一個變量能重新調整一個已經存在的方法也是得益與C語言的類型系統(這個有點像一個變量能夠隱藏它的隱藏功能)

前綴

在Objective-C應用中的所有類名都必須是全局唯一的。由于很多不同的框架中會有一些相似的功能,所以在名字上也可能會有重復(users, views, requests / responses 等等),所以蘋果官方文檔規定類名需要有2-3個字母作為前綴。

類前綴

蘋果官方建議兩個字母作為前綴的類名是為官方的庫和框架準備的,而對于作為第三方開發者的我們,官方建議使用3個或者更多的字母作為前綴去命名我們的類。

一個資深的Mac或iOS開發者可能會記得下面大部分的縮寫標識符:

Prefix Frameworks
AB AddressBook / AddressBookUI
AC Accounts
AD iAd
AL AssetsLibrary
AU AudioUnit
AV AVFoundation
CA CoreAnimation
CB CoreBluetooth
CF CoreFoundation / CFNetwork
CG CoreGraphics / QuartzCore / ImageIO
CI CoreImage
CL CoreLocation
CM CoreMedia / CoreMotion
CV CoreVideo
EA ExternalAccessory
EK EventKit / EventKitUI
GC GameController
GLK GLKit
JS JavaScriptCore
MA MediaAccessibility
MC MultipeerConnectivity
MF MessageUI
MIDI CoreMIDI
MK MapKit
MP MediaPlayer
NK NewsstandKit
NS Foundation, AppKit, CoreData
PK PassKit
QL QuickLook
SC SystemConfiguration
Se Security
SK StoreKit / SpriteKit
SL Social
SS Safari Services
TW Twitter
UI UIKit
UT MobileCoreServices

第三方類前綴

直到最近,由于CocoaPods的出現和大量新的iOS開發者的涌現,開源代碼的遍布,第三方代碼在很大程度上對蘋果和其余的Objective-C開發社區來說已經不是問題了。最近蘋果官方的命名指南也發生了變化,它將三個字母作為前綴的建議只是做為一個習慣做法。

正因為這樣,那些已經存在的第三方庫依然使用2個字母作為前綴,你可以參考一些那些在GitHub上得到很多start的Objective-C的倉庫

Prefix Frameworks
AF AFNetworking (“Alamofire”)
RK RestKit
PU GPUImage
SD SDWebImage
MB MBProgressHUD
FB Facebook SDK
FM FMDB (“Flying Meat”)
JK JSONKit
UI FlatUI
NI Nimbus
AC Reactive Cocoa

我們已經看到這個第三方庫的前綴已經和我的AFNetworking一樣了,所以最好還是要在你的代碼中遵守要三個字母以上的作為類前綴的規定(https://github.com/AshFurrow/AFTabledCollectionView)。

對于那些針對特殊功能而寫的第三方庫的作者,可以考慮在下一次主要升級時使用@compatibility_alias來為那些使用者們提供一個天衣無縫的轉移路徑。

方法前綴

不僅是類容易造成命名沖突,selectors也很容易造成命名沖突,甚至方法比類會有更多的問題。
考慮一下這個category:

  1. @interface NSString (PigLatin) 
  2. - (NSString *)pigLatinString; 
  3. @end 

如果 -pigLatinString方法被另一個category實現了(或者以后版本的iOS或者Mac OS X 在NSString類中也添加了同樣名字的方法),那么調用這個方法就會得到未定義的行為錯誤,因為我們不能保證在runtime中哪個方法會先被定義。

我們可以通過在方法名前加前綴來避免這個問題,就像加這個類名一樣(在類別名前加前綴也是個好辦法):

  1. @interface NSString (XXXPigLatin) 
  2. - (NSString *)xxx_pigLatinString; 
  3. @end 

蘋果官方建議所有category方法使使用前綴,這個建議比類名需要加前綴的規定更加廣為人知和接受。

很多開發者都在熱情地討論著這個規定的某一方面。然而,無論是通過成本角度還是效益角度來衡量命名沖突風險的可能性都是是不全面的:

category的主要功能是通過語法糖將一些有用的功能包裹進原來的類中。任何一個category方法都可以被選擇性實現,你也可以把他當做是self的一個隱型的功能方法。

當我在編譯器的環境參數中將OBJC_PRINT_REPLACED_METHODS這個參數設置為YES,那我們就能在編譯的時候檢測方法名是否有沖突。實際上,方法名的沖突是很少發生的,而且在發生的時候,他們通常會得到一個needlessly duplicated across dependencies的提示。即使發生最壞的情況,程序在運行是出現異常,那么很可能是兩個方法名一樣,那么他們做的事情也是一樣的,所以結果也不會有什么變化。就像Swiss Army Knife寫了一個category,他定義了NSArray中的-firstObject這個方法,那么只要蘋果官方沒有在NSArray中加這個方法的話,那么這個類別方法一直有效的。

在蘋果官方的編程指南有很多嚴肅又松散的解釋。這里沒有固定的文檔,他們可能一直變化。看到這里,如果你還是懸而未決,那么你只需要把的category方法名加上前綴,如果你還是選擇不去做任何改變,那么你就等著自食其果吧。

Swizzling

在Swizzling時,方法名加前綴或者后綴也是非常有必要的,這個我在上周關于swizzling的文章中提到過。

  1. @implementation UIViewController (Swizzling) 
  2.   
  3. @implementation UIViewController (Swizzling) 
  4.   
  5. - (void)xxx_viewDidLoad { 
  6.     [self xxx_viewDidLoad]; 
  7.   
  8.     // Swizzled implementation 

我們真的需要命名空間么?

在最近關于Objective-C替換、改造和重塑的討論中,我可以明顯地發現命名空間是未來的一個趨勢。但是它到底給我們帶來了什么呢?

美學?除了IETE成員和軍事人員,我想沒有人會喜歡CLAs的視覺審美,但是用::,/或者另外的.這些符號真的能讓我們覺得更好么?你真的想要以后把NSArray叫做Foundation Array?(那我這個NSHipster.com這個博客不是也得改名字了?!)

語義學?我比較一下其他的語言,看看他們是怎么用命名空間的,那么你就會意識到命名空間不能解決所有不明確的問題。可能在某些額外環境的情況下,那些命名空間會出現更多問題。

你還是不贊同,那么你想象一下Objective-C的命名空間的實現可能會像這個樣子,你會覺得怎么樣:

  1. @namespaceX 
  2.     @implementation Obje 
  3.     @using F: Foundatio 
  4.     - (void)fo 
  5.       F:Array *array = @[<a href="http://www.jobbole.com/members/1/" rel="nofollow">@1</a>,@2, @3 
  6.       // 
  7.      
  8.     @en 
  9. @end 

雖然Objective-C有繁瑣的代碼但也有容易理解的明顯優點。我們作為開發者去討論NSString的時候,我們不會把它理解成別的意思,編 譯器也是一樣。當我們在閱讀代碼時,我們不需要過多地去考慮這些代碼是什么作用的。并且最重要的是,這個類名在google這些搜索引擎中很容易就可以找到

不管怎樣,如果你對這個討論感興趣的話,我強烈建議你看一下Kyle Sluder《 this namespace feature proposal 》。非常值得一看。

責任編輯:閆佳明 來源: blog.jobbole
相關推薦

2011-05-11 11:20:26

Objective-C

2011-08-17 10:58:59

Objective-C構造函數

2011-07-29 16:16:30

Objective-c block

2014-04-01 10:50:42

iOS開發runtimeObjective-C

2011-07-18 16:36:51

Objective-C XCode

2015-10-08 10:01:10

Objective-CLayout

2011-08-17 10:29:39

Objective-C預處理

2011-08-04 10:57:33

Objective-C C語言 BOOL

2011-08-04 13:38:01

Objective-C C++

2011-08-15 14:32:42

Objective-C委托協議

2011-08-01 17:11:43

Objective-C 函數

2011-08-17 11:05:22

Objective-C方法

2011-07-27 16:55:12

Objective-c 閉包

2011-08-18 09:21:17

Objective-C

2011-08-16 13:43:40

Objective-C文件cocoa

2011-08-16 10:23:04

Objective-CNSAutoreleaXcode常用鍵

2011-07-08 18:44:09

Objective-C Self Super

2011-07-29 15:47:21

iPhone開發 Objective- C

2014-08-05 13:09:34

Objective-C動態特性

2011-08-10 18:07:29

Objective-C反射
點贊
收藏

51CTO技術棧公眾號

黄色美女久久久| 91黄色在线| 老司机亚洲精品| 精品国产一区二区三区久久狼黑人| 欧美丝袜在线观看| xxx.xxx欧美| 国产亚洲精品资源在线26u| 国产欧美精品一区二区| 国产一级一片免费播放放a| 亚洲成a人片77777在线播放| 欧美久久一二区| 免费一级淫片aaa片毛片a级| 精品美女视频在线观看免费软件| 黑人巨大精品欧美黑白配亚洲| 久久免费精品日本久久中文字幕| 免费在线观看污| 99精品国产一区二区三区2021 | 日本高清一区| 国产精品探花视频| 亚洲视频成人| xxxxx91麻豆| av网站免费在线看| 国内自拍欧美| 欧美一区二区三区免费视频| 乱子伦视频在线看| 丁香花在线影院| 亚洲欧洲制服丝袜| 日产中文字幕在线精品一区| 日本精品久久久久| 国产精品中文欧美| 国产精品久久久久久久7电影 | 在线国产日韩| 日韩一区二区三区国产| 久久久精品人妻无码专区| 成人香蕉社区| 日韩欧美精品在线| 日本77777| 国产极品久久久久久久久波多结野| 亚洲成人激情自拍| 日韩视频 中文字幕| 欧美天天影院| 中文字幕制服丝袜成人av| 蜜桃传媒一区二区| 日本中文字幕一区二区有码在线 | 精品国产av色一区二区深夜久久| 国产精品成人**免费视频| 欧美性猛交xxxx乱大交退制版 | 成人在线爆射| 日韩欧美大尺度| 国产视频一视频二| а√在线中文网新版地址在线| 一个色综合av| 黄色一级片黄色| 精品一性一色一乱农村| 一区二区三区四区精品在线视频| 久久国产精品免费观看| 自由的xxxx在线视频| 亚洲欧美日韩在线不卡| 国产精品免费看久久久无码| 婷婷av在线| 亚洲在线视频网站| 国产日韩av网站| 麻豆蜜桃在线观看| 日韩欧美成人免费视频| 美女喷白浆视频| 国产精品成人国产| 7777精品伊人久久久大香线蕉完整版 | 国产午夜精品在线| 嫩草影院一区二区| 99re成人精品视频| 欧美一级爽aaaaa大片| 成人高潮成人免费观看| 国产精品嫩草影院com| 尤物国产精品| 日本h片在线| 狠狠干狠狠久久| www日韩视频| 欧美日韩视频免费看| 樱空桃在线播放| 特种兵之深入敌后| av一级亚洲| 日韩成人高清在线| www.黄色在线| 91精品一区二区三区综合| 精品自拍视频在线观看| 日韩特黄一级片| 日韩国产精品大片| 91免费电影网站| 成人免费视频国产免费麻豆| 97久久超碰精品国产| 日韩精品欧美在线| 美女羞羞视频在线观看| 亚洲国产精品欧美一二99| 欧美黄网站在线观看| 成人交换视频| 欧美精品一区二区在线观看| 成人免费无遮挡无码黄漫视频| 日韩在线综合| 久久久久久久999精品视频| 国产毛片aaa| 极品销魂美女一区二区三区| 国产乱码精品一区二区三区日韩精品| 黄色在线小视频| 亚洲激情男女视频| 欧美丰满熟妇xxxxx| 国内精品视频| 亚洲一二三在线| 日本少妇裸体做爰| 捆绑变态av一区二区三区| 精品亚洲欧美日韩| dj大片免费在线观看| 91久久国产综合久久| 免费在线观看日韩av| 国产成人调教视频在线观看| 久久久爽爽爽美女图片| 11024精品一区二区三区日韩| 99精品在线免费| 裸体大乳女做爰69| 日本综合久久| 亚洲国产99精品国自产| 日本在线一级片| 美女一区二区视频| 久久久神马电影| 欧美xxx黑人xxx水蜜桃| 欧美精品v日韩精品v韩国精品v| 欧美bbbbb性bbbbb视频| 激情综合电影网| 亚洲自拍小视频| 在线观看完整版免费| 色乱码一区二区三区88| 中文字幕在线观看网址| 精品福利电影| 97人人模人人爽人人喊38tv| 麻豆网站在线看| 欧美日韩一区二区三区四区| 白丝女仆被免费网站| 99成人免费视频| 国产伦精品一区二区三区视频黑人| 国产欧美黑人| 91麻豆精品国产自产在线观看一区| 神马久久久久久久久久久| 裸体素人女欧美日韩| 久久久久久欧美精品色一二三四| 97人澡人人添人人爽欧美| 欧美mv日韩mv国产| 久久久久久久久久久97| 国产成人高清在线| 亚洲av综合色区| 奇米一区二区| 欧美激情a在线| 性中国古装videossex| 一区二区三区四区亚洲| 又色又爽又黄18网站| 欧美日韩成人| 国产伦精品一区二区三区四区视频| 欧美大胆的人体xxxx| 亚洲国语精品自产拍在线观看| 国产主播在线观看| 成人深夜视频在线观看| 国内精品视频一区二区三区| 老牛影视av一区二区在线观看| 97精品国产91久久久久久| 男人天堂av网| 色综合久久久久综合体桃花网| 中文字幕在线观看的网站| 久久精品动漫| 亚洲人久久久| 久久影院一区二区三区| 国产69精品99久久久久久宅男| 天堂网2014av| 色av成人天堂桃色av| 国产亚洲精品精品精品| 久久国产精品免费| 丰满人妻一区二区三区53号| 红杏aⅴ成人免费视频| 欧美在线xxx| 在线日本中文字幕| 欧美一级高清大全免费观看| 日本少妇吞精囗交| 日本一区二区三区dvd视频在线| 色www免费视频| 欧美日韩福利| 日韩久久久久久久| 国产95亚洲| 欧美亚洲视频在线看网址| 成年人视频网站在线| 欧美一区二区三区啪啪| 免费日韩一级片| 国产精品久久久久影院色老大 | 国产一区二区三区免费| 欧美又粗又长又爽做受| 精品国产不卡| 亚洲综合av影视| 国模套图日韩精品一区二区| 久久久极品av| 午夜福利视频一区二区| 欧美日韩国产电影| 国产尤物在线视频| 亚洲欧美日韩久久精品| 加勒比一区二区| 国产精品资源网| 欧美精品无码一区二区三区| 欧美国产91| 三级三级久久三级久久18| 玖玖玖视频精品| 国产精品久久久久久久久免费| 青青在线视频| 久久激情五月丁香伊人| 日色在线视频| 欧美本精品男人aⅴ天堂| 凹凸精品一区二区三区| 亚洲一区二区三区四区五区黄| 手机av在线不卡| 97精品久久久久中文字幕| 亚洲综合在线一区二区| 天堂在线一区二区| 欧美深夜福利视频| 中文字幕一区二区三区久久网站 | 精品国产免费久久久久久婷婷| 乱人伦精品视频在线观看| 日本阿v视频在线观看| 91亚洲成人| 日韩伦理一区二区三区av在线| 成午夜精品一区二区三区软件| 91精品国产综合久久香蕉最新版 | 欧美在线视频全部完| 日韩精品视频免费看| 亚洲精品视频在线观看免费| 蜜桃av免费观看| 国产无人区一区二区三区| 呦呦视频在线观看| 成人黄色综合网站| 色哟哟在线观看视频| 久久99精品久久久| 一区二区三区国产免费| 老牛国产精品一区的观看方式| 天堂…中文在线最新版在线| 精品二区久久| 日韩精品视频在线观看视频| 欧美久久成人| 在线视频不卡国产| 91综合久久| 日本xxx免费| 91超碰国产精品| 手机福利在线视频| 99免费精品| 99热这里只有精品7| 性欧美69xoxoxoxo| 妞干网这里只有精品| 一区二区三区在线电影| 黄色影视在线观看| 欧美日本不卡| 成人午夜视频在线观看免费| 亚洲欧洲日本一区二区三区| 欧美一级视频在线播放| 一区三区视频| 1024精品视频| 日韩黄色片在线观看| www.com黄色片| 久久97超碰国产精品超碰| 岛国av免费在线| 国产精品小仙女| 日本一区二区在线观看视频| 97超碰欧美中文字幕| 美女爆乳18禁www久久久久久 | 免费在线视频观看| 亚洲一区视频在线| 久久狠狠高潮亚洲精品| 日韩欧美国产成人| 中文字幕+乱码+中文乱码91| 91精品国产一区二区| 午夜久久久久久噜噜噜噜| 亚洲第一精品夜夜躁人人爽| 黄色视屏网站在线免费观看| 日韩中文字幕精品视频| 欧美人与禽猛交乱配| 欧美一级电影久久| 全球中文成人在线| 97久久精品午夜一区二区| 亚洲大片精品免费| 一区二区三区三区在线| 国产专区一区| www国产黄色| 精品影视av免费| 李丽珍裸体午夜理伦片| 日本一区二区视频在线| 在线免费日韩av| 日韩欧美中文免费| 国产又色又爽又黄又免费| 精品久久久久久久久久久院品网| 九色网友自拍视频手机在线| 久久这里只有精品视频首页| 蜜桃视频在线网站| 国产精品视频久久久| 成人自拍在线| 中文字幕欧美日韩一区二区三区 | 亚洲欧美日韩在线| 亚洲欧美综合另类| 日韩精品资源二区在线| 国产小视频在线播放| 欧美噜噜久久久xxx| 欧美片第一页| 99视频网站| 欧美电影免费| 久热免费在线观看| 国产91精品一区二区麻豆亚洲| 在线观看日本中文字幕| 亚洲一区视频在线观看视频| 中文字幕无线码一区| 亚洲精品国精品久久99热一| 欧美激情免费| 国产成人精品久久二区二区91 | 久久精品国产色蜜蜜麻豆| 深田咏美中文字幕| 一区二区三区在线播放| 一本色道久久综合亚洲| 亚洲全黄一级网站| 91制片在线观看| av在线不卡一区| 秋霞欧美视频| 国产成人a亚洲精v品无码| 高清不卡一二三区| 中文字幕av久久爽av| 欧美性生活大片视频| 加勒比一区二区三区在线| 久久久久久中文字幕| 国产成人视屏| 亚洲日本无吗高清不卡| 日韩激情av在线| 国产肥白大熟妇bbbb视频| 疯狂做受xxxx欧美肥白少妇| 亚洲精品久久久久久久久久久久久久| 久久亚洲精品小早川怜子66| 激情欧美一区二区三区黑长吊| 美女精品国产| 国产日韩一区二区三区在线| 人妻体内射精一区二区三区| 亚洲国产成人tv| 成人毛片在线精品国产| 欧美疯狂xxxx大交乱88av| 国产成年精品| 日韩video| 高清不卡在线观看av| 欧美黄色免费观看| 精品日本一线二线三线不卡| 丝袜国产在线| 高清国产在线一区| 亚洲一级网站| 最近中文字幕无免费| 污片在线观看一区二区| 天天操天天操天天操| 91国产精品电影| 日韩福利视频一区| 欧美xxxxx在线视频| 日本一区二区三区在线观看| 中文字幕日日夜夜| 精品久久久av| 亚洲午夜免费| 亚洲熟妇国产熟妇肥婆| 2021国产精品久久精品| 欧美特级黄色片| 搡老女人一区二区三区视频tv| 亚洲福利影视| www.国产亚洲| 91视频免费看| 波多野结衣视频在线看| 日韩视频免费大全中文字幕| 国产欧美88| 国产免费黄色小视频| 久久久不卡网国产精品二区 | 91麻豆精品国产91久久久久久 | 国产精品mp4| 久久中文视频| 精品无码av一区二区三区不卡| 亚洲v中文字幕| 黄色片在线免费观看| 成人a在线视频| 雨宫琴音一区二区在线| 国产精品九九九九九| 欧美日韩亚洲高清一区二区| 亚洲羞羞网站| 免费看国产精品一二区视频| 麻豆视频一区二区| 精品亚洲永久免费| 亚洲视频在线播放| 国产一区二区三区国产精品| 欧美不卡在线播放| 日韩一区欧美一区| 成人精品在线播放| 国产精品成av人在线视午夜片| 亚洲中无吗在线| 美女100%无挡| 日韩一区二区三区四区| 男人最爱成人网| 警花观音坐莲激情销魂小说| 久久日韩粉嫩一区二区三区| 精品二区在线观看| 国产精品69av| 影音先锋亚洲精品| 多男操一女视频|