如何移除Three20中private API

2021-08-24 22:09:43 字數 1641 閱讀 3257

那些非public的api如下:

firstresponder 

uitouch._locationinwindow 

uitouch._phase 

uitouch._previouslocationinwindow 

uitouch._tapcount 

uitouch._timestamp 

uitouch._touchflags 

uitouch._view 

uitouch._window 

我想three20 使用這些api主要是為了省事,比如firstresponder,而uitouch的這些屬性也主要是在debug的時候才用到。因此拿掉以上這些private api是比較安全的,關鍵就是如何找到這些api的位置。

解決此問題的方法有兩個:

有乙個熱心的開發者(uprise78 ),在爆出此問題後,根據郵件列表中的討論以及自己的研究,在github上做了乙個fork(three20-p31 ),移除了以上所有的private api,所以只需更新此fork即可。

1.發生問題後,作者本人做了一次修改,移除部分private api

2.作者本人並沒有完全移除那些private api,uprise78 在作者的基礎上又做了一次完整修改,

看起來經過這次修改後,基本解決了此問題。

也就是說只要參考作者及uprise78 的兩次修改,就能完整移除所有的private api使用。於是我上github上尋找three20 的修改歷史,發現他們兩的修改分別如下:

2009-10-28 作則修改:

commit  8183ae25528bbc575ab41a41227756f06c166240

tree    2b2fd7b49fc71755d675eb0fd85c82098da563a5

parent  e8ecb801ca70ba824846928b7ca75faf376aeedb

2009-10-31 uprise78 修改:

commit  2c03d2b98ddb287ba68ddb628c4a72588bbee79e

tree    cc3cbfe0b23468d876166881f028a576f4ddcc7b

parent  8183ae25528bbc575ab41a41227756f06c166240

commit  3a1f0a9bea92aed27f12a513e1e70c5412ba0f91

tree    0da7dba956f71ca57a029dc3a7c88448e76f9942

parent  2c03d2b98ddb287ba68ddb628c4a72588bbee79e

在github上比對以上修改後,就能完整移除private api了。

以上所謂移除private api,均是使用#ifdef debug將之包裹,所以要注意以下兩點:

1.程式中不能有#define debug

2.在build時,不能在preprocessor marco設定debug

目前方法一已經被證明是可行的,見郵件列表中的討論:***p31 fork fixes rejections***

希望上面的資訊能幫助使用three20的iphone開發者!

2009-12-08更新:

Xcode4匯入Three20開源庫

xcode4匯入three20開源庫 2 新建乙個xcode4工程,名為hellothree20,工程的結構如下 如果這個工程是開啟的,請把它關閉。免得匯入three20後,xcode會出現工程已經被修改的提示。3 在terminal中使用命令,匯入three20 cd到three20的解壓目錄,有...

XCode4配置three20,自己記錄下

2。在解壓目錄下src three20下的three20.xcodeproj拖到自己的工程裡,在彈出的對話方塊中destination欄 copy items into destination group s folder 不要選中,addto targets欄中選中自己的工程target,並不是u...

OS教程 iOS開源專案Three20介紹

from 做ios開發的朋友,如果你沒有用過three20,那有點out了 如果你沒有聽過three20,那可能是還沒有踏入門來!言重了,sorry,下面簡單介紹一下three20這個牛x的開源專案。three20,這是facebook開源出來的乙個ios專案,它可以幫助我們快速的開發ios應用。今...