iOS隨筆 一道面試題

這道題是這樣:項目中有個地方用到了KVO,例子:
<pre><code>
[aModel addObserver:self forKeyPath:@"someKey" options:NSKeyValueObservingOptionNew context:nil];
</code></pre>
@“someKey”是aModel的一個屬性名
如果aModel這個類頻繁重構,someKey的名字變?yōu)锧“anotherKey”,上面的KVO代碼編譯器是不會給出修改提示的,那這個KVO實際上就失效了。這時候如何運用IDE的編譯特性來提示開發(fā)者去修改該Key呢?

這個時候可以用到編譯器對@selector的檢查結合runtime API來實現(xiàn)上述目標,獲取property的屬性名稱。

代碼示例:
<pre><code>

Class cls = [aModelclass];
Method method = class_getInstanceMethod(cls, @selector(someKey));
SEL selector = method_getName(method);
NSString *key = NSStringFromSelector(selector);
[aModel addObserver:self forKeyPath:@"someKey" options:NSKeyValueObservingOptionNew context:nil];

</code></pre>

當然也可以在NSObject的category里封裝上述方法,但是封裝之后就沒有編譯提示了,在代碼運行期間會直接crash在class_getInstanceMethod()方法處。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 轉至元數(shù)據(jù)結尾創(chuàng)建: 董瀟偉,最新修改于: 十二月 23, 2016 轉至元數(shù)據(jù)起始第一章:isa和Class一....
    40c0490e5268閱讀 2,032評論 0 9
  • *面試心聲:其實這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個offer,總結起來就是把...
    Dove_iOS閱讀 27,582評論 30 472
  • 1.Difference between shallow copy and deep copy? 淺復制和深復制的...
    用心在飛閱讀 1,069評論 0 9
  • 本文轉載自:http://yulingtianxia.com/blog/2014/11/05/objective-...
    ant_flex閱讀 867評論 0 1
  • 吳奇隆和劉詩詩他們在巴厘島補辦婚禮,吳奇隆更是稱劉詩詩是老天留給自己的“最好的”禮物。 劉詩詩的婚紗是來自于Car...
    瑞婗綩莎閱讀 657評論 0 0

友情鏈接更多精彩內容