电竞比分网-中国电竞赛事及体育赛事平台

分享

iOS開發(fā)筆試面試

 shijingfulwpqz 2016-05-25

首先先說一個簡書作者的博客,把runtime入門講得夠清晰。

http://www.jianshu.com/p/25a319aee33d 

Objective-C語言使用了面向?qū)ο筇匦院拖⑥D(zhuǎn)發(fā)機制。

一:Runtime的數(shù)據(jù)結(jié)構(gòu):

解析:Root class其實就是NSObject,NSObject是沒有超類的,所以Root class 的superclass指向nil;

        每一個Class都有一個isa指針指向唯一的Meta class;

        Root class(meta)的superclass指向Root class,也就是NSObject,形成一個回路;

        每個Meta class的isa指針都指向Root class(Meta);

        注意: 不論是示例對象還是Class,都是id類型的對象(Class同樣是對象)

                    示例對象的isa指向它的Class(儲存所有減法方法),Class對象isa指向元類(儲存所有加好方法)

                    向一個對象(id)類型發(fā)送消息時,都是從這個對象的isa指針指向的Class中尋找方法


        methodLists表示方法列表,他是指向objc_method_list結(jié)構(gòu)體的二級指針,可以動態(tài)修改*methodLists的值來添加成員方法,也是category實現(xiàn)原理,同樣也解析category不能添加示例變量的原因。

        (二級指針相關(guān)閱讀:http://www./blog/2014/07/03/pointers-to-pointers.html)

@implementation Son : Father- (id)init{    self = [super init];    if (self)    {        NSLog(@'%@', NSStringFromClass([self class]));        NSLog(@'%@', NSStringFromClass([super class]));    }    return self;}@end

        兩個都是輸出son,具體看文章解析。

二:關(guān)于消息轉(zhuǎn)發(fā)機制:

關(guān)于這個的一些比較基礎(chǔ)的用法可以在另外一個例子直接看到:

http://my.oschina.net/caijunrong/blog/508738 

這三種方法的選擇時機作者說:

        Method Resolution:由于Method Resolution不恩能夠像消息轉(zhuǎn)發(fā)那樣可以交給其他對象來處理,所以只能適用在 原來的類中替代掉;

        Fast Forwarding:它可以將消息處理轉(zhuǎn)發(fā)給其它對象,使用范圍更廣,不只是限于原來的對象;

        Normal Forwarding: 它跟Fast Forwarding一樣可以消息轉(zhuǎn)發(fā),單它能通過NSInvocation對象獲取更多消息發(fā)送的信息,例如:target、selector、arguments和返回值等信息。

三:關(guān)于怎么使用Category對已存在的類別進行擴展,一般只能添加示例方法貨類方法,因為二級指針的原因,而不適合添加額外的屬性。雖然可以在category頭文件中聲明property屬性,但在實現(xiàn)文件中編譯器是無法synthesize任何示例變量和屬性訪問方法。這時需要自定義屬性訪問方法,并且使用Associatd Objects來給已經(jīng)存在的類Category添加自定義的屬性。

    Associated Objects提供三個API來向?qū)ο筇砑?、獲取和刪除關(guān)聯(lián)值:

  void objc_setAssociatedObject (id object, const void *key, id value, objc_AssociationPolicy policy )  id objc_getAssociatedObject (id object, const void *key )  void objc_removeAssociatedObjects (id object )

筆試題:

    iOS6級:

    http://blog./2014/03/06/ios_exam_0_key/ 







    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多