1.id是一种泛型,可以用来引用任何类型的对象。对象是一种包含代码的struct结构体,id实际上是一个指向结构体的指针。
2.Objective-C运行时(runtime)可以将不同的对象当成隐藏的self参数传递,所以那些对象的实例变量发生更改时,运行时也可以进行相应的更改。
3.直接更改由继承得到的实例变量的值是一种不良的习惯。一定要通过方法或property属性来更改。
4.C++具有多继承性,也就是一个类可以直接从两个或多个类继承而来。但Objective-C不支持多继承。你可以通过Objective-C的其他特性来达到多继承的效果。例如:类别category(扩展行为)和协议protocol(实现多个协议,同样达到扩展行为的目的)。
5.复合通过指针指向对象。这之所以行得通,是因为所有Objective-C对象都使用动态分配的内存。
6.可以在类别中添加属性,但是不能添加实例变量,而且属性必须是@dynamic类型的。添加属性的好处在于你可以通过点表达式来访问setter和getter方法。
7.Cocoa没有任何真正的私有方法。如果你知道对象支持的某个方法的名称,即使该对象所在的类的接口中没有声明该方法,你也可以调用它。
8.像NSString和NSArray这样的类实际上只是一些特殊类的虚假表象。由于init方法可以接收参数,因此它的代码能够检查其接收的参数,并决定返回另一个类的对象可能更适合。例如,我们假设一条字符串肯能是由一段很长的文本组成的,也可能是由一串阿拉伯数字组成的。基于这些情况,字符串初始化函数可能会创建一个不同类的对象(该对象更符合目标字符串的要求),然后返回该对象而不是原来的对象。
网友评论