- 在collection集合类中如NSSet中是不允许有相同的元素的,但是如果这样写:
这样就会第一个set的输出结果是两个相同的元素,第二个set的输出结果只有一个元素
- 类族模式:由于在OC中没有抽象基类,因此用工厂模式,比如我们可以用创建UIButton类似的方法:判断某个实例所属的类是否在类族之中,要用isKindOfClass不能用isMemeberOfClass,因为有些类会有内部类型
- 关联对象的使用,实际上就是在局部空间建立一个通道来共享某些类,如在UIAlert里面共享block
- 消息是由接受消息的对象和函数指针构成的,若是没有用到runtime,编译器生成函数代码的指令是硬编码,如果用到动态绑定:
第一,先要用@dynamic关键字修饰需要动态生成的属性,然后重写类的resolveInstanceMethod方法
第二,如果第一步还是没有找到合适的方法,就会调用forwardingTargetForSelector方法转发给其他对象,一直执行到NSObject
第三,如果第二步还没有成功,就要启动完整的消息转发机制,首先创建NSInvocation对象,把尚未处理的消息信息全部封装在这个对象里
- 可以通过方法调换的方式,改变objc_msgSend中函数列表中IMP的指针
- OC对象实际上使用结构体和指针来构造的,用isMemberOfClass判断是否为某一特定类的实例,用isKindOfClass判断是否为其类或者派生类的实例,而不要用[A Class] == [B Class]
时间: 2024-10-12 07:58:38