码迷,mamicode.com
首页 > 其他好文 > 详细

读Effective Objective C总结(三)

时间:2015-08-26 12:22:39      阅读:101      评论:0      收藏:0      [点我收藏+]

标签:collection   关键字   dynamic   编译器   动态   

  1. 在collection集合类中如NSSet中是不允许有相同的元素的,但是如果这样写:技术分享

    这样就会第一个set的输出结果是两个相同的元素,第二个set的输出结果只有一个元素

  2. 类族模式:由于在OC中没有抽象基类,因此用工厂模式,比如我们可以用创建UIButton类似的方法:技术分享判断某个实例所属的类是否在类族之中,要用isKindOfClass不能用isMemeberOfClass,因为有些类会有内部类型

  3. 关联对象的使用,实际上就是在局部空间建立一个通道来共享某些类,如在UIAlert里面共享block

  4. 消息是由接受消息的对象和函数指针构成的,若是没有用到runtime,编译器生成函数代码的指令是硬编码,如果用到动态绑定:

    第一,先要用@dynamic关键字修饰需要动态生成的属性,然后重写类的resolveInstanceMethod方法

    第二,如果第一步还是没有找到合适的方法,就会调用forwardingTargetForSelector方法转发给其他对象,一直执行到NSObject

    第三,如果第二步还没有成功,就要启动完整的消息转发机制,首先创建NSInvocation对象,把尚未处理的消息信息全部封装在这个对象里

  5. 可以通过方法调换的方式,改变objc_msgSend中函数列表中IMP的指针

  6. OC对象实际上使用结构体和指针来构造的,用isMemberOfClass判断是否为某一特定类的实例,用isKindOfClass判断是否为其类或者派生类的实例,而不要用[A Class] == [B Class]


读Effective Objective C总结(三)

标签:collection   关键字   dynamic   编译器   动态   

原文地址:http://8365137.blog.51cto.com/8355137/1688357

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!