分享

iOS开发笔试面试

 shijingfulwpqz 2016-05-25

首先先说一个简书作者的博客,把runtime入门讲得够清晰。

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

Objective-C语言使用了面向对象特性和消息转发机制。

一:Runtime的数据结构:

解析: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)类型发送消息时,都是从这个对象的isa指针指向的Class中寻找方法


        methodLists表示方法列表,他是指向objc_method_list结构体的二级指针,可以动态修改*methodLists的值来添加成员方法,也是category实现原理,同样也解析category不能添加示例变量的原因。

        (二级指针相关阅读: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,具体看文章解析。

二:关于消息转发机制:

关于这个的一些比较基础的用法可以在另外一个例子直接看到:

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

这三种方法的选择时机作者说:

        Method Resolution:由于Method Resolution不恩能够像消息转发那样可以交给其他对象来处理,所以只能适用在 原来的类中替代掉;

        Fast Forwarding:它可以将消息处理转发给其它对象,使用范围更广,不只是限于原来的对象;

        Normal Forwarding: 它跟Fast Forwarding一样可以消息转发,单它能通过NSInvocation对象获取更多消息发送的信息,例如:target、selector、arguments和返回值等信息。

三:关于怎么使用Category对已存在的类别进行扩展,一般只能添加示例方法货类方法,因为二级指针的原因,而不适合添加额外的属性。虽然可以在category头文件中声明property属性,但在实现文件中编译器是无法synthesize任何示例变量和属性访问方法。这时需要自定义属性访问方法,并且使用Associatd Objects来给已经存在的类Category添加自定义的属性。

    Associated Objects提供三个API来向对象添加、获取和删除关联值:

  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/ 







    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多