精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

欧美亚洲在线日韩| 精品电影在线| 欧美特黄一区| 精品爽片免费看久久| 国产精品69页| 亚洲欧美日韩一区二区三区在线| 激情 小说 亚洲 图片: 伦| 国产一二三区在线观看| 99免费精品在线观看| 国产精品7m视频| 久久久国产成人| 欧美限制电影| 亚洲国产天堂久久综合| 91av视频免费观看| 正在播放日韩精品| 亚洲最大成人综合| 亚洲成人第一| 神马亚洲视频| 丰满放荡岳乱妇91ww| 国产欧美日韩高清| 依依成人综合网| 亚洲一级一区| 免费av在线一区| 国产精品成人在线视频| 任我爽精品视频在线播放| 91精品中文字幕一区二区三区| 黄色国产精品视频| 黄色在线观看视频网站| 日韩欧美视频免费观看| 国产精品久久久久av蜜臀| 欧美日本国产视频| 久久综合久久色| av资源在线| 亚洲已满18点击进入久久| 亚洲一卡二卡三卡四卡无卡网站在线看| 四季av日韩精品一区| 韩国精品免费视频| 国产免费观看久久黄| 国产污视频网站| 性xx色xx综合久久久xx| 国外色69视频在线观看| 欧美xxxx黑人xyx性爽| 99热国内精品永久免费观看| 亚洲无av在线中文字幕| 中国黄色a级片| 欧美人体视频| 日韩精品极品视频| 中文字幕a在线观看| 亚洲国产高清在线观看| 91精品国产综合久久精品 | 国产高清视频在线播放| av高清久久久| 久久av一区二区三区亚洲| 肥臀熟女一区二区三区| 国产成人aaaa| 国产一区二区自拍| 日本高清视频在线| av男人天堂一区| 久久综合中文色婷婷| 三级在线播放| 国产欧美一区二区精品久导航 | 午夜精品久久久久久不卡8050| 日韩一级特黄毛片| 国产亚av手机在线观看| 午夜av区久久| 黄色国产精品视频| ww久久综合久中文字幕| 777久久久精品| 一级全黄裸体片| 欧美国产极品| 在线观看免费高清视频97| 日本少妇aaa| 欧美特黄一级| 国产v综合ⅴ日韩v欧美大片 | 欧美日韩免费一区二区| 黄色成人91| 国产v综合ⅴ日韩v欧美大片| 一区二区自拍偷拍| 国产精品一品视频| 好吊色欧美一区二区三区四区| 日韩精品视频无播放器在线看| 国产欧美一区在线| 99国产精品白浆在线观看免费| 少妇视频一区| 欧美精品xxxxbbbb| 国模无码视频一区| 波多野结衣在线观看一区二区| 久久久精品在线观看| 精品在线播放视频| 老司机精品视频导航| aa日韩免费精品视频一| 视频二区在线| 亚洲人精品午夜| 国产xxxxx在线观看| 精品国产亚洲一区二区三区在线| 日韩成人性视频| 久久人妻无码aⅴ毛片a片app| 亚洲无吗在线| 成人写真视频福利网| 四虎在线观看| 亚洲精品乱码久久久久久久久| 国产白丝袜美女久久久久| 国产精品成人国产| 日韩电影大全免费观看2023年上 | 亚洲一区二区三区三| 日韩 欧美 高清| 精品午夜av| 中文字幕日韩在线观看| 久久免费少妇高潮99精品| 日日欢夜夜爽一区| 欧美视频13p| 久久99久久精品国产| 高清一区二区三区视频| 免费观看a视频| 国产欧美日韩在线| 亚洲色成人www永久在线观看| 国产综合av| 国产草草浮力影院| 素人一区二区三区| 亚洲国产三级网| 免费三级在线观看| 快she精品国产999| 国产在线精品一区二区中文| 一区二区高清不卡| 色婷婷综合久久久| 久久久久久久无码| 国一区二区在线观看| 国产专区欧美专区| 国产精品全国免费观看高清| www.久久久| 日本美女在线中文版| 色婷婷久久久亚洲一区二区三区 | 日本一区二区三区在线观看视频| 国产精品护士白丝一区av| 国产一区二区三区精彩视频| 色悠久久久久综合先锋影音下载| 成人手机在线播放| 国产精品va在线观看视色 | 欧美图片激情小说| 91精品国产一区二区在线观看| 这里只有精品丝袜| 波多野结衣视频在线观看| 久久理论电影网| av动漫在线观看| 亚洲自拍都市欧美小说| 国产91在线视频| 麻豆影视在线| 91黄色在线观看| 国产精品天天干| 日韩专区一卡二卡| 日韩欧美一区二区视频在线播放 | 国产精品一国产精品最新章节| 日本三级在线观看网站| 日韩精品一区二区三区在线| 黄色一级视频免费观看| 国产精品12区| 韩日视频在线观看| 亚洲人成网亚洲欧洲无码| 欧美一级高清免费播放| 久久经典视频| 欧美高清dvd| 强行糟蹋人妻hd中文| 成人综合在线观看| 日韩少妇内射免费播放18禁裸乳| 亚洲图区在线| 国产精品永久在线| 污视频网站在线免费| 亚洲国产天堂久久综合| 无码人妻久久一区二区三区 | 九一免费在线观看| 粉嫩一区二区三区四区公司1| 97在线观看免费高清| 九色在线播放| 69堂精品视频| 日韩少妇高潮抽搐| 国产欧美精品一区aⅴ影院 | 美女国内精品自产拍在线播放| 成人福利小视频| 日韩欧美a级成人黄色| 亚洲天堂av中文字幕| 国产精品自产自拍| 国产二区视频在线播放| 成人在线亚洲| 国产精品久久久久久久天堂第1集 国产精品久久久久久久免费大片 国产精品久久久久久久久婷婷 | 欧美在线一二三| 91精品一区二区三区蜜桃| 成人小视频在线| 日本爱爱免费视频| 欧美+日本+国产+在线a∨观看| 精品一区国产| 国产精品久久久久久av公交车| 韩国19禁主播vip福利视频| 国产主播福利在线| 欧美电影免费观看完整版| 亚洲国产av一区二区三区| 亚洲欧美国产77777| 97超碰在线免费观看| 韩国理伦片一区二区三区在线播放 | 91老司机精品视频| 涩涩视频在线播放| 欧美另类在线播放| 1769视频在线播放免费观看| 亚洲精品一区二区三区福利| 中文字幕第三页| 天天综合色天天| 欧美另类videoxo高潮| 久久香蕉国产线看观看99| 国产成年人视频网站| 国产精品久久久久久模特| 欧美亚洲视频一区| 在线日韩网站| 国产伦精品一区二区三区视频黑人| 欧美成人xxxx| 国产mv免费观看入口亚洲| 伦理av在线| 久久国产精品亚洲| 午夜老司机在线观看| 亚洲精品综合精品自拍| 色噜噜在线播放| 欧美www视频| 国产精品毛片一区二区在线看舒淇 | 一区在线不卡| 国产精品一区=区| 亚洲人免费短视频| 91豆花精品一区| 嗯~啊~轻一点视频日本在线观看| 久久久999国产| av一区在线观看| 亚洲天堂av在线免费观看| 三级视频在线播放| 日韩av影片在线观看| 色婷婷中文字幕| 精品成人一区二区| 亚洲国产一二三区| 欧美一级片在线观看| 国产免费久久久| 在线播放亚洲一区| 一女二男一黄一片| 欧美日韩精品三区| 中文字幕乱码在线观看| 欧美日韩在线不卡| 91精品国自产| 欧美人牲a欧美精品| 亚洲一区 中文字幕| 欧美日韩中文字幕一区二区| 青青草视频在线观看免费| 色综合久久六月婷婷中文字幕| 青青草免费观看视频| 日韩欧美第一页| 男人天堂视频在线| 欧美日韩dvd在线观看| 在线亚洲欧美日韩| 51精品视频一区二区三区| 91在线视频国产| 日韩三级高清在线| 国产91绿帽单男绿奴| 亚洲大胆美女视频| 亚州视频一区二区三区| 亚洲欧美精品一区二区| 国产无套粉嫩白浆在线2022年| 在线视频欧美日韩| 男人天堂久久久| 欧美国产欧美亚洲国产日韩mv天天看完整| 影音先锋中文在线视频| 97久久精品视频| 粉嫩一区二区三区| 91精品久久久久久久久久久| 涩爱av色老久久精品偷偷鲁| 国产在线精品一区| 日产午夜精品一线二线三线| 2025韩国大尺度电影| 国产精品草草| 欧美日韩亚洲一二三| 老司机免费视频一区二区| 欧美一级片在线免费观看| 91在线视频18| 精品一区二区三孕妇视频| 亚洲美女免费视频| 免费在线不卡视频| 欧美日韩三级一区二区| 亚洲精品久久久久久无码色欲四季 | 国产黄a三级三级| 亚洲愉拍自拍另类高清精品| 亚洲欧美偷拍视频| 91精品国产一区二区三区蜜臀| 人妻少妇精品无码专区久久| 自拍视频国产精品| 9lporm自拍视频区在线| 国产精品久久精品| 欧美一级大片在线视频| 人偷久久久久久久偷女厕| 国产精品99久久精品| 高清在线观看免费| 国产在线不卡一卡二卡三卡四卡| 37p粉嫩大胆色噜噜噜| 亚洲乱码一区二区三区在线观看| 黄网在线观看视频| 制服.丝袜.亚洲.中文.综合| 日本亚洲欧美| 欧美激情精品久久久久久蜜臀| 久久91导航| 好看的日韩精品视频在线| 日韩精品一区二区三区免费观影 | sm久久捆绑调教精品一区| 国产欧美日韩免费看aⅴ视频| 黄色网一区二区| 色乱码一区二区三区熟女| 亚洲一区一卡| 美女搡bbb又爽又猛又黄www| 国产精品美女一区二区三区| 黄色片视频网站| 日韩欧美一二三四区| 日本成人在线播放| 日本人成精品视频在线| 国产欧美一区二区三区米奇| 综合一区中文字幕| 日韩电影免费一区| 91精品人妻一区二区| 亚洲高清免费观看高清完整版在线观看| 在线视频免费观看一区| 亚洲日本成人女熟在线观看| 麻豆免费在线| 黑人另类av| 亚洲激情社区| av天堂一区二区| 一区二区三区在线观看动漫| 亚洲一区 中文字幕| 中文字幕在线亚洲| 99re66热这里只有精品4| 麻豆蜜桃91| 国产精品久久久久9999高清| 欧美一级片黄色| 亚洲成人自拍网| 色婷婷av一区二区三区之e本道| 欧美激情视频在线| 一级做a爱视频| 欧美激情日韩| wwww.国产| 国产亚洲精品bt天堂精选| 亚洲国产成人精品激情在线| 久久国产精品亚洲人一区二区三区| 男人用嘴添女人下身免费视频| 国产aⅴ精品一区二区三区色成熟| 亚洲不卡在线播放| 51精品国自产在线| 黄色在线论坛| 91九色综合久久| 亚洲精品午夜av福利久久蜜桃| 在线观看国产中文字幕| 日本一区二区高清| 一本到在线视频| 久久亚洲精品成人| 日韩精品视频中文字幕| 国产经典久久久| 国产成人av电影免费在线观看| 精品在线视频免费观看| 精品国产一区二区国模嫣然| 啊啊啊久久久| 欧美黑人3p| 美女在线视频一区| 天天做夜夜爱爱爱| 欧美一级日韩免费不卡| 毛片在线网址| 欧美国产二区| 精品一区二区三区免费| 亚洲av无码一区二区三区在线| 欧美不卡激情三级在线观看| 乱插在线www| 欧美一区二区三区四区五区六区| 日韩电影免费在线看| www.av视频| 日韩激情视频在线| 成人av集中营| 欧美性受xxxx黑人猛交88| 成人免费高清视频| 极品国产91在线网站| 视频在线观看一区二区| 99国产精品免费网站| 免费日韩视频在线观看| 成人免费在线视频| 天天综合天天色| 国产专区欧美专区| 国产欧美日韩一区二区三区在线| 国产三级短视频| 精品国产伦一区二区三区观看体验 | 国产一区二区视频网站| www.欧美免费| 欧美1区二区| 天天干天天操天天做| 亚洲成av人在线观看| 97视频在线观看网站| 国产美女精品久久久| 欧美aaaaa成人免费观看视频| 久久久久性色av无码一区二区| 亚洲四色影视在线观看| 136福利精品导航| 男人插女人下面免费视频| 亚洲一区二区高清| 尤物网址在线观看| 久久久亚洲综合网站|