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

Objective-C中不同方式實現(xiàn)鎖(二)

移動開發(fā) iOS
NSHashTable效仿了NSSet(NSMutableSet),但提供了比NSSet更多的操作選項,尤其是在對弱引用關(guān)系的支持上,NSHashTable在對象/內(nèi)存處理時更加的靈活。相較于NSSet,NSHashTable具有以下特性:

Objective-C中不同方式實現(xiàn)鎖(二)

NSHashTable

在看KVOController的代碼時,又看到了NSHashTable這個類,所以就此整理一下。

NSHashTable效仿了NSSet(NSMutableSet),但提供了比NSSet更多的操作選項,尤其是在對弱引用關(guān)系的支持上,NSHashTable在對象/內(nèi)存處理時更加的靈活。相較于NSSet,NSHashTable具有以下特性:

NSSet(NSMutableSet)持有其元素的強引用,同時這些元素是使用hash值及isEqual:方法來做hash檢測及判斷是否相等的。

NSHashTable是可變的,它沒有不可變版本。

它可以持有元素的弱引用,而且在對象被銷毀后能正確地將其移除。而這一點在NSSet是做不到的。

它的成員可以在添加時被拷貝。

它的成員可以使用指針來標(biāo)識是否相等及做hash檢測。

它可以包含任意指針,其成員沒有限制為對象。我們可以配置一個NSHashTable實例來操作任意的指針,而不僅僅是對象。

初始化NSHashTable時,我們可以設(shè)置一個初始選項,這個選項確定了這個NSHashTable對象后面所有的行為。這個選項是由NSHashTableOptions枚舉來定義的,如下所示:

  1. enum { 
  2.  
  3. // 默認行為,強引用集合中的對象,等同于NSSet 
  4. NSHashTableStrongMemory = 0
  5.  
  6. // 在將對象添加到集合之前,會拷貝對象 
  7. NSHashTableCopyIn = NSPointerFunctionsCopyIn, 
  8.  
  9. // 使用移位指針(shifted pointer)來做hash檢測及確定兩個對象是否相等; 
  10. // 同時使用description方法來做描述字符串 
  11. NSHashTableObjectPointerPersonality = NSPointerFunctionsObjectPointerPersonality, 
  12.  
  13. // 弱引用集合中的對象,且在對象被釋放后,會被正確的移除。 
  14. NSHashTableWeakMemory = NSPointerFunctionsWeakMemory 
  15. }; 
  16. typedef NSUInteger NSHashTableOptions;

當(dāng)然,我們還可以使用NSPointerFunctions來初始化,但只有使用NSHashTableOptions定義的這些值,才能確保NSHashTable的各個API可以正確的工作—包括拷貝、歸檔及快速枚舉。

個人認為NSHashTable吸引人的地方在于可以持有元素的弱引用,而且在對象被銷毀后能正確地將其移除。我們來寫個示例:

  1. // 具體調(diào)用如下 
  2. @implementation TestHashAndMapTableClass { 
  3.  
  4. NSMutableDictionary *_dic; 
  5. NSSet *_set; 
  6.  
  7. NSHashTable *_hashTable; 
  8.  
  9. - (instancetype)init { 
  10.  
  11. self = [super init]; 
  12.  
  13. if (self) { 
  14.  
  15. [self testWeakMemory]; 
  16.  
  17. NSLog(@"hash table [init]: %@", _hashTable); 
  18.  
  19. return self; 
  20.  
  21. - (void)testWeakMemory { 
  22.  
  23. if (!_hashTable) { 
  24. _hashTable = [NSHashTable weakObjectsHashTable]; 
  25.  
  26. NSObject *obj = [[NSObject alloc] init]; 
  27.  
  28. [_hashTable addObject:obj]; 
  29.  
  30. NSLog(@"hash table [testWeakMemory] : %@", _hashTable); 
  31.  
  32. 這段代碼的輸出結(jié)果如下: 
  33.  
  34. hash table [testWeakMemory] : NSHashTable { 
  35. [6] <NSObject: 0x7fa2b1562670
  36. hash table [init]: NSHashTable { 
  37. }

可以看到,在離開testWeakMemory方法,obj對象被釋放,同時對象在集合中的引用也被安全的刪除。

這樣看來,NSHashTable似乎比NSSet(NSMutableSet)要好啊。那是不是我們就應(yīng)用都使用NSHashTable呢?Peter Steinberger在The Foundation Collection Classes給了我們一組數(shù)據(jù),顯示在添加對象的操作中,NSHashTable所有的時間差不多是NSMutableSet的2倍,而在其它操作中,性能大體相近。所以,如果我們只需要NSSet的特性,就盡量用NSSet。

另外,Mattt Thompson在NSHash​Table & NSMap​Table的結(jié)尾也寫了段挺有意思的話,在此直接摘抄過來:

As always, it's important to remember that programming is not about being clever: always approach a problem from the highest viable level of abstraction. NSSet and NSDictionary are great classes. For 99% of problems, they are undoubtedly the correct tool for the job. If, however, your problem has any of the particular memory management constraints described above, then NSHashTable & NSMapTable may be worth a look.

參考

NSHashTable Class Reference

NSHash​Table & NSMap​Table

NSHashTable & NSMapTable

The Foundation Collection Classes

零碎

(一) “Unknown class XXViewController in Interface Builder file.”“ 問題處

最近在靜態(tài)庫中寫了一個XXViewController類,然后在主工程的xib中,將xib的類指定為XXViewController,程序運行時,報了如下錯誤:

  1. Unknown class XXViewController in Interface Builder file. 

之前也遇到這個問題,但已記得不太清楚,所以又開始在stackoverflow上找答案。

其實這個問題與Interface Builder無關(guān),最直接的原因還是相關(guān)的symbol沒有從靜態(tài)庫中加載進來。這種問題的處理就是在Target的”Build Setting”–>“Other Link Flags”中加上”-all_load -ObjC”這兩標(biāo)識位,這樣就OK了。

(二)關(guān)于Unbalanced calls to begin/end appearance transitions for …問題的處理

我們的某個業(yè)務(wù)有這么一個需求,進入一個列表后需要立馬又push一個web頁面,做一些活動的推廣。在iOS 8上,我們的實現(xiàn)是一切OK的;但到了iOS 7上,就發(fā)現(xiàn)這個web頁面push不出來了,同時控制臺給了一條警告消息,即如下:

  1. Unbalanced calls to begin/end appearance transitions for ... 

在這種情況下,點擊導(dǎo)航欄中的返回按鈕時,直接顯示一個黑屏。

我們到stackoverflow上查了一下,有這么一段提示:

  1. occurs when you try and display a new viewcontroller before the current view controller is finished displaying. 

意思是說在當(dāng)前視圖控制器完成顯示之前,又試圖去顯示一個新的視圖控制器。

于是我們?nèi)ヅ挪榇a,果然發(fā)現(xiàn),在viewDidLoad里面去做了次網(wǎng)絡(luò)請求操作,且請求返回后就去push這個web活動推廣頁。此時,當(dāng)前的視圖控制器可能并未顯示完成(即未完成push操作)。

  1. Basically you are trying to push two view controllers onto the stack at almost the same time.  

當(dāng)幾乎同時將兩個視圖控制器push到當(dāng)前的導(dǎo)航控制器棧中時,或者同時pop兩個不同的視圖控制器,就會出現(xiàn)不確定的結(jié)果。所以我們應(yīng)該確保同一時間,對同一個導(dǎo)航控制器棧只有一個操作,即便當(dāng)前的視圖控制器正在動畫過程中,也不應(yīng)該再去push或pop一個新的視圖控制器。

所以***我們把web活動的數(shù)據(jù)請求放到了viewDidAppear里面,并做了些處理,這樣問題就解決了。

責(zé)任編輯:chenqingxiang 來源: 南峰子的技術(shù)博客
相關(guān)推薦

2013-06-20 10:40:32

Objective-C實現(xiàn)截圖

2013-03-26 10:35:47

Objective-C單例實現(xiàn)

2011-07-19 17:24:31

Objective-C 對象

2011-08-15 17:47:13

Objective-CisMemberOfC

2011-08-04 15:52:48

Objective-C HTML

2011-08-10 18:07:29

Objective-C反射

2013-03-27 12:54:00

iOS開發(fā)Objective-C

2011-05-11 15:58:34

Objective-C

2011-05-11 11:20:26

Objective-C

2010-02-04 15:41:10

C++內(nèi)存管理

2011-07-20 13:34:37

Objective-C self.

2011-07-27 16:18:42

Objective-c 協(xié)議

2011-08-15 17:06:01

Objective-CNSLog

2011-07-08 18:44:09

Objective-C Self Super

2011-08-04 11:15:46

Objective-C 構(gòu)造函數(shù) 構(gòu)造方法

2011-05-11 13:54:08

Objective-C

2011-05-11 14:06:49

Objective-C

2011-05-11 15:45:50

內(nèi)存管理Objective-C

2011-08-04 14:58:37

Objective-C Cocoa NSString

2013-08-21 14:57:42

objective-c問題
點贊
收藏

51CTO技術(shù)棧公眾號

神马电影久久| 在线观看爽视频| 国产剧情一区二区| 国外成人性视频| 伊人网在线视频观看| 欧美日韩破处视频| 亚洲一区电影777| 欧美精品久久久| 一区二区www| 亚洲视频免费| 最近2019中文字幕第三页视频 | 咪咪色在线视频| 亚洲精品国产精| 日本麻豆一区二区三区视频| 久久91精品国产| 2019男人天堂| 大陆精大陆国产国语精品| 91国偷自产一区二区开放时间| 91手机视频在线| 免费国产在线视频| 国产又粗又猛又爽又黄91精品| 欧美一级在线播放| 九九热精品免费视频| 视频一区在线观看| 欧美精品一区二区不卡 | 欧美日韩五区| 亚洲二区在线观看| 一区二区精品免费视频| 污污视频在线免费看| 国产主播一区二区三区| 日韩美女在线看| 亚洲精品视频在线观看免费视频| 91精品国产乱码久久久久久| 亚洲欧美国内爽妇网| 你懂的在线观看网站| 成人亚洲精品| 欧美网站一区二区| 免费在线观看日韩视频| 阿v视频在线| 一区二区三区四区视频精品免费 | 免费网站看v片在线a| 国产亚洲视频系列| 国偷自产av一区二区三区小尤奈| 国产视频在线观看视频| 蜜臀av国产精品久久久久| 57pao国产成人免费| 欧美成人精品一区二区免费看片| 亚洲女同一区| 久久精彩免费视频| 殴美一级黄色片| 欧美中文一区二区| 一区二区三区亚洲| av手机在线播放| 国产一区二区三区日韩精品| 日韩久久免费电影| 欧美一区二区三区成人精品| 日韩电影不卡一区| 日韩av在线免费观看一区| 国产人妻人伦精品1国产丝袜| 98视频精品全部国产| 日韩精品中午字幕| av漫画在线观看| 麻豆精品99| 国产午夜精品麻豆| 亚洲精品视频久久久| 伊人久久大香线蕉av不卡| 亚洲全黄一级网站| 日韩免费成人av| 日韩精品免费| 久久精品电影一区二区| 四虎影院中文字幕| 欧美日韩国产高清| 91精品国产高清自在线| 国产成人精品一区二三区| 午夜一区不卡| 国产精品视频男人的天堂| 亚洲天堂一二三| 国产乱人伦偷精品视频免下载| 亚洲aa在线观看| 色婷婷av一区二区三区之e本道| 91小视频免费观看| 神马一区二区影院| 中文字幕免费高清电视剧网站在线观看| 亚洲色大成网站www久久九九| 国产欧美久久久久| 国偷自产一区二区免费视频| 欧美日韩精品一区二区三区蜜桃 | 日本肉体xxxx裸体xxx免费| 成人免费一区| 日韩精品专区在线影院重磅| 国内精品久久99人妻无码| 精品美女视频| 丝袜亚洲欧美日韩综合| www青青草原| 欧美亚洲自偷自偷| 成人妇女免费播放久久久| 亚洲欧美强伦一区二区| 国产亚洲欧美日韩俺去了| 视频一区二区视频| 中文字幕在线视频网站| 欧美久久免费观看| 国产人妻黑人一区二区三区| 日本女优一区| 性色av一区二区咪爱| 亚洲一二区视频| 久久综合九色综合97_久久久| 一区二区精品在线观看| 中文字幕在线视频久| 91精品免费在线观看| 野花社区视频在线观看| 亚洲天堂免费| 国产精品久久9| 五月婷婷狠狠干| 亚洲精品网站在线观看| 天天碰免费视频| 欧美三级电影在线| 久久视频在线看| 天天爽夜夜爽人人爽| 国产精品12区| 自拍偷拍一区二区三区| 黑人巨大亚洲一区二区久 | 丰满少妇xbxb毛片日本| 成人网18免费网站| 77777少妇光屁股久久一区| 97人妻精品一区二区三区视频| 久久久久久久久久看片| 2018国产在线| 高清精品视频| 久久69精品久久久久久久电影好| 欧美另类高清videos的特点| 91玉足脚交白嫩脚丫在线播放| 久久久久久久免费视频| 黑人一区二区三区| 伊人久久五月天| aaa在线视频| 91免费国产在线| av高清在线免费观看| 国产精品va视频| 久久亚洲精品一区| 一级aaaa毛片| 国产精品欧美综合在线| 国产又大又黄又粗的视频| 亚洲va久久| 日本精品一区二区三区在线播放视频 | www.youjizz.com在线| 欧美成人三级电影在线| 欧美三级免费看| 国产一区二区91| 一级黄色片播放| 国产一区二区视频在线看| 日韩视频中文字幕| 亚洲最大成人在线视频| 国产精品美女久久久久av爽李琼| 日本久久久久久久久久久久| jvid福利在线一区二区| 国产精品麻豆va在线播放| 国产有码在线| 欧美日韩在线播放三区| 99精品中文字幕| 国产做a爰片久久毛片| 在线看无码的免费网站| 99精品视频在线免费播放| 久久亚洲精品成人| 国产后入清纯学生妹| 亚洲高清在线精品| 欧美精品黑人猛交高潮| 日日噜噜夜夜狠狠视频欧美人 | 久久三级视频| 日韩免费电影一区二区三区| 日韩高清成人| 美乳少妇欧美精品| 亚洲国产福利视频| 天天免费综合色| 国产午夜精品福利视频| 老司机一区二区| 日本久久久网站| 亚洲精品进入| 国产视频福利一区| 五月婷婷视频在线观看| 日韩www在线| 亚洲天堂久久久久| 亚洲一区成人在线| 日韩一级av毛片| 国产一区不卡视频| 国内性生活视频| 日韩av大片| 懂色一区二区三区av片| 黑人巨大亚洲一区二区久 | 亚洲爱爱视频| 久久99精品久久久久久琪琪| 日韩a在线观看| 欧美日韩国产小视频在线观看| 麻豆亚洲av熟女国产一区二| 99riav久久精品riav| 欧美女同在线观看| 在线不卡欧美| 亚洲视频小说| 欧美理论电影在线精品| 国产欧美亚洲精品| av免费不卡| 久久伊人精品一区二区三区| 深夜影院在线观看| 91精品国产欧美一区二区| 天堂中文字幕在线观看| 亚洲欧美日韩久久| 丰腴饱满的极品熟妇| 国产福利精品一区二区| 狠狠热免费视频| 99精品99| 4444在线观看| 欧美亚洲激情| 久久国产精品-国产精品| 亚洲一区导航| 国产999精品久久久| 免费电影网站在线视频观看福利| 中文字幕欧美精品日韩中文字幕| 欧美亚洲精品在线观看| 91精品国产乱码久久蜜臀| 波多野结衣高清视频| 亚洲成人你懂的| 日本少妇高清视频| 欧美激情一区二区三区全黄| 91精品啪在线观看国产| 国产一区二区在线观看视频| 一级黄色香蕉视频| 久久av一区| 国产免费观看高清视频| 午夜精品久久| 曰韩不卡视频| 欧美电影免费播放| 日韩视频专区| 女厕嘘嘘一区二区在线播放| 精品国产免费久久久久久尖叫 | 欧美一区观看| 日本天堂一区| 国产伦精品一区二区三毛| 欧美大片91| 亚洲综合第一页| 伊人久久综合网另类网站| 国产热re99久久6国产精品| 校园春色亚洲色图| 国产99久久精品一区二区| 一二三四视频在线中文| 国产91ⅴ在线精品免费观看| eeuss鲁一区二区三区| 欧美激情视频一区二区三区不卡| 在线黄色网页| 久久97精品久久久久久久不卡| 成人直播在线| 色综合久久88色综合天天看泰| 操你啦视频在线| 欧美国产日产韩国视频| 欧美理论片在线播放| 欧美激情久久久| 国产在线拍揄自揄拍视频| 久久久久久久久久久久久久久久久久av| 国内小视频在线看| 性欧美暴力猛交69hd| 午夜久久中文| 国产成人91久久精品| 精品视频在线一区二区在线| 国产伦精品免费视频| 成人自拍视频| 成人精品水蜜桃| 欧美交换国产一区内射| 国产理论电影在线观看| 亚洲区中文字幕| www.中文字幕久久久| 色噜噜久久综合伊人一本| 美女免费久久| 九九九热精品免费视频观看网站| 91禁在线看| 国产国语刺激对白av不卡| 国产第一亚洲| 91pron在线| 色橹橹欧美在线观看视频高清| 日本一区二区三区免费看| 日韩精品首页| 黄色三级中文字幕| 亚洲一区亚洲| 中国黄色片一级| 成人激情综合网站| 国产ts在线播放| 亚洲免费观看在线观看| 一级片中文字幕| 6080yy午夜一二三区久久| 成人午夜视频一区二区播放| 亚洲老板91色精品久久| 天天综合视频在线观看| 久久久噜噜噜久久中文字免| 国产韩日精品| 国产精品免费在线播放| 欧美三级情趣内衣| 日本免费成人网| 三级成人在线视频| aaaaa黄色片| 国产人成亚洲第一网站在线播放| 欧美日韩一级大片| 色婷婷av一区二区三区大白胸| av手机免费看| 国产亚洲激情视频在线| 天堂av最新在线| 国产精品黄色av| 精品成人自拍视频| 日日噜噜噜夜夜爽爽| 久久人人97超碰国产公开结果| 无套白嫩进入乌克兰美女| 91免费在线视频观看| 久久久久久久中文字幕| 欧美无砖砖区免费| 艳母动漫在线看| 欧美人成在线视频| 欧美视频免费看| 欧美精品一区二区三区久久| 狠狠噜噜久久| 17c国产在线| 亚洲国产经典视频| 成年人视频在线免费看| 日韩精品最新网址| 乱人伦中文视频在线| 国产极品精品在线观看| 麻豆视频一区| 国产曰肥老太婆无遮挡| 国产精品18久久久久| 91精品少妇一区二区三区蜜桃臀| 色婷婷久久99综合精品jk白丝| 天天爱天天干天天操| 久久影视电视剧免费网站清宫辞电视| 免费成人直播| 久久人人97超碰人人澡爱香蕉| 国产精品久久| 国产伦理在线观看| 日韩美女视频一区| 中文字幕在线2018| 亚洲小视频在线| 浪潮色综合久久天堂| 欧美日本亚洲| 另类国产ts人妖高潮视频| 久久久老熟女一区二区三区91| 一区二区三区不卡视频| 99久久久无码国产精品免费| 日韩综合视频在线观看| 国产精品伊人| 在线国产伦理一区| 激情综合网天天干| chinese全程对白| 91精品黄色片免费大全| 黄网站免费在线播放| 91视频免费在线| 自拍视频亚洲| 国偷自产av一区二区三区麻豆| 一区二区在线观看不卡| 欧美一级一区二区三区| 隔壁老王国产在线精品| 国产精品毛片av| 精品一区二区中文字幕| 国产亚洲精品aa| 亚洲视频一区在线播放| 日韩在线一区二区三区免费视频| 自拍偷拍亚洲| 精品人妻人人做人人爽| 成人高清视频免费观看| 99热在线观看免费精品| 亚洲男人av电影| 久久亚洲国产精品尤物| dy888午夜| 99久久久无码国产精品| www.久久精品视频| 在线看国产精品| 亚洲性视频在线| 欧美 日韩 亚洲 一区| 久久精品视频网| 国产乱人乱偷精品视频| 欧美激情亚洲视频| 亚洲伊人春色| 91插插插影院| 亚洲成人资源网| 国产高清一级毛片在线不卡| 成人欧美一区二区三区在线| 亚洲无线视频| 欧美成人国产精品一区二区| 555夜色666亚洲国产免| 黑人极品ⅴideos精品欧美棵| 欧美动漫一区二区| 九一九一国产精品| 国产精选第一页| 在线日韩av观看| 国产suv精品一区二区四区视频| 欧美日韩在线视频一区二区三区| 国产精品入口麻豆原神| 色偷偷在线观看| 国产精品一香蕉国产线看观看| 国产精品va| 国精产品一区一区| 亚洲精品av在线| 精品一区二区三区免费看| 免费av网址在线| 亚洲综合视频在线观看| 成人在线视频成人| 精品乱码一区二区三区|