文档介绍:between shallow copy and deep copy? 浅复制和深复制的区别? 答案: 浅层复制: 只复制指向对象的指针, 而不复制引用对象本身。深层复制: 复制引用对象本身。意思就是说我有个 A 对象, 复制一份后得到 A_copy 对象后, 对于浅复制来说, A和 A_copy 指向的是同一个内存资源,复制的只不过是是一个指针,对象本身资源还是只有一份, 那如果我们对 A_copy 执行了修改操作, 那么发现 A 引用的对象同样被修改, 这其实违背了我们复制拷贝的一个思想。深复制就好理解了, 内存中存在了两份独立对象本身。用网上一哥们通俗的话将就是: 浅复制好比你和你的影子, 你完蛋, 你的影子也完蛋深复制好比你和你的克隆人,你完蛋,你的克隆人还活着。 is advantage of categories? What is difference between implementing a category and inheritance? 类别的作用?继承和类别在实现中有何区别? 答案: category 可以在不获悉, 不改变原来代码的情况下往里面添加新的方法, 只能添加, 不能删除修改。并且如果类别和原来类中的方法产生名称冲突, 则类别将覆盖原来的方法, 因为类别具有更高的优先级。类别主要有 3 个作用: (1) 将类的实现分散到多个不同文件或多个不同框架中。(2) 创建对私有方法的前向引用。(3) 向对象添加非正式协议。继承可以增加,修改或者删除方法,并且可以增加属性。 between categories and extensions? 类别和类扩展的区别。答案: category 和 extensions 的不同在于后者可以添加属性。另外后者添加的方法是必须要实现的。 extensions 可以认为是一个私有的 Category 。 between protocol in objective c and interfaces in java? obc 中的协议和 java 中的接口概念有何不同? 答案: OBC 中的代理有 2 层含义,官方定义为 formal 和 informal protocol 。前者和 Jav a 接口一样。 informal protocol 中的方法属于设计模式考虑范畴,不是必须实现的,但是如果有实现, 就会改变类的属性。其实关于正式协议, 类别和非正式协议我很早前学习的时候大致看过,也写在了学习教程里“非正式协议概念其实就是类别的另一种表达方式“这里有一些你可能希望实现的方法,你可以使用他们更好的完成工作”。这个意思是, 这些是可选的。比如我门要一个更好的方法, 我们就会申明一个这样的类别去实现。然后你在后期可以直接使用这些更好的方法。这么看, 总觉得类别这玩意儿有点像协议的可选协议。" 现在来看, 其实 protocal 已经开始对两者都统一和规范起来操作, 因为资料中说“非正式协议使用 interface 修饰“, 现在我们看到协议中两个修饰词: “必须实现(***@requied) ”和“可选实现(***@optional) ”。 are KVO and KVC? 答案: kvc: 键- 值编码是一种间接访问对象的属性使用字符串来标识属性,而不是通过调用存取方法, 直接或通过实例变量访问的机制。很多情况下可以简化程序代码。 apple 文档其实给了一个很好的例子。 kvo: 键值观察机制,他提供了观察某一属性变化的方法,极大的简化了代码。具体用看到嗯哼用到过的一个地方是对于按钮点击变化状态的的监控。比如我自定义的一个 button [cpp] [self addObserver:self forKeyPath:@"highlighted" options:0 context:nil]; #pragma mark KVO - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { if ([keyPath isEqualToString:@"highlighted"] ){ [self setNeedsDisplay]; }} 对于系统是根据 keypath 去取的到相应的值发生改变, 理论上来说是和 kvc 机制的道理是一样的。对于 kvc 机制如何通过 key 寻找到 value :“当通过 KVC 调用对象时, 比如: [self valueForKey:@ ” someK