成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

深度解析iPhone Category用法

移動開發 iOS
本文介紹的是深度解析iPhone Category用法,假設你的庫已經使用了Category,最后要使用放到真機上的時候發現,他Crash了。怎么辦?先來看內容如何解決。

深度解析iPhone Category用法是本文要介紹的內容,在開發3.0的iPhone靜態庫的時候,遇到了一些問題。盡管我在應用程序鏈接的選項里頭使用-ObjC的選項,我的程序在iPhone上運行時還是Crash了,而且經過定位之后發現,還是由庫中的Category相關方法沒有被鏈入導致的;而程序在模擬器上運行卻是一點問題沒有,Category的相關方法都能正確得到執行。

那么到底是什么原因導致在真機上應用程序沒有將Category方法鏈入呢?答案還是在上次提到的這個蘋果官方網頁。該網頁下方的IMPORTANT里頭提到,在64位及iPhone OS系統里,由于編譯器的Bug導致了-ObjC選項無法正常將靜態庫中的類的Category的方法載入!也就是說,

假設你的類叫MyClass,并且另外有個Category叫MyClass(Extent),那么如果你的應用程序鏈接你的庫,使用MyClass(Extent)中的方法,程序將會Crash!要提的是,如果你的MyClass(Extent) 的實現是和MyClass的實現是在同一個實現體中,那么該Category的方法還是可以正常使用的,因為編譯的時候會一起被載入。

那么,假設你的庫已經使用了Category,最后要使用放到真機上的時候發現,他Crash了!那該怎么辦呢?除了改代碼,還是有一些補救方法的。

第一種,官方推薦的,但往往不是很好用的。使用-all_load選項,這會導致所有的類的方法都會被載入,不管“你的程序”有沒有用到,所有的,包括系統的,方法會被載入。這個方法不僅會導致你的目標程序大小增大,而且往往容易引起一些沖突,而這些沖突往往你無法解決(常常出現在你鏈接的各種庫中)。或者你可以使用-force_load,這個你可以指定要載入所有方法的庫,這個算一個還不錯的解決方法,但是僅在Xcode3.2之后才支持,如果你必須支持低版本的SDK的話,那么很悲劇,您這兩種方法都不大適用?。ū瘎∪缥?,就是這種情況)

第二種,你使用的Category是你自己的類的Category,這是個常見的情況,自己的一個類比較大,分拆成多個文件時常用的手段。經過一段時間的思考,發現這種情況的解救方法還是比較容易的,雖然個人認為有點不優雅,但是可以很簡單的解決掉。

你可以將你所有的Category的頭文件包含到類的主頭文件或者主實現文件中,并且直接在你的類的主實現文件中去import你的各個Category的實現文件。這樣,編譯器在鏈入你的類的主方法時,你的各個Category實現由于被import到你的類主實現文件中,所以他可以找到你的Category方法,并將該方法鏈入目標文件。當然,這個方法不太優雅就是了。

第三種,就是你使用的是系統API某個類的Category,比如你為UILabel增加了個Category:UILabel(MyExtent).這個其實也很麻煩,剛開始也試了很多方法,網上的一些方法也試過,但是貌似還是不管用,最后換了個想法想,這個和自己類的Category有什么區別,貌似一樣沒區別阿。所以最后試了一下,只要找一個必定會使用的類,將Category的頭文件和實現文件import到該類的主實現文件中,這樣編譯器就也能找到這些Category方法了。雖然一樣解決了問題,還是那句話,一點都不優雅!

雖然最后終于都解決了這些問題,得出的結論還是,不要輕易在iPhone3.0及3.0以上的靜態庫中使用分文件的Category方法。但2.0的SDK編譯的試驗過無問題。

最后的吐槽是:Category作為一個Objective-C最特色的語法功能之一,居然無法正常的在靜態庫中使用,蘋果你不覺得你很過分嗎!這么嚴重的bug也不修復!你難道逼我寫個1000行左右的類嗎?有些類由于某些原因(不一定是技術原因)是不允許分拆成不同的類名!

小結:深度解析iPhone Category用法的內容介紹完了,希望本文對你有所幫助!

責任編輯:zhaolei 來源: 互聯網
相關推薦

2011-08-02 18:07:03

iPhone 內省 Cocoa

2011-07-18 14:23:40

iPhone 多任務

2011-08-12 11:23:47

iPhone窗口視圖

2011-06-07 17:16:47

iPhone 數據

2011-08-12 14:54:45

iPhone委托

2011-08-19 13:45:14

iPhone應用iPhone OS數據

2011-07-27 17:02:12

Xcode iPhone 單元測試

2011-07-29 14:55:25

iPhone開發 動畫過渡

2011-08-11 17:00:33

iPhone數據庫SQLite

2011-07-26 14:07:29

iPhone 二維碼

2011-06-02 17:27:49

iphone 多線程

2011-08-02 17:14:41

iPhone應用 UITableVie

2024-01-11 12:14:31

Async線程池任務

2011-08-15 11:37:20

iPhone開發Mask

2010-07-13 13:49:43

Perl foreac

2011-06-02 18:02:50

iPhone MVC

2011-07-21 17:05:31

iPhone 屏幕 緩沖

2011-08-12 14:39:00

iPhoneSDK

2021-11-09 23:08:20

iPhone手機安卓

2013-12-09 10:34:12

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 人人精品 | 亚洲色片网站 | 国产日韩精品在线 | 婷婷色综合 | 99亚洲精品 | 小川阿佐美pgd-606在线 | 久久精品国产久精国产 | 国产日韩视频 | 精品福利在线 | 欧美亚洲成人网 | 粉色午夜视频 | 亚洲高清视频一区二区 | 国产免费一区 | 999在线精品 | 黄色在线免费观看视频网站 | 日韩毛片在线免费观看 | 婷婷开心激情综合五月天 | 色噜噜亚洲男人的天堂 | 国产极品粉嫩美女呻吟在线看人 | 日韩成人高清在线 | 99在线观看 | 性色av网站| 亚洲天堂网站 | 777777777亚洲妇女 | 日韩免费网站 | av永久| 91精品麻豆日日躁夜夜躁 | 亚洲毛片在线 | 久久精品在线免费视频 | 天天干狠狠干 | 国产精品波多野结衣 | 不卡一区二区三区四区 | 国产精品视频免费观看 | 国产精品美女久久久 | www狠狠爱com| 一区二区三区国产好 | 成年人在线观看 | 日韩欧美综合在线视频 | 91精品国产乱码久久久 | 日韩高清黄色 | 欧美日本一区二区 |