收藏本站
51Code Android开发培训Banner
您所在的位置:51Code首页 > 资料精选 > 学习资料 > 【学习资料】C++开发者快速学习Objective-C语言核心语法

【学习资料】C++开发者快速学习Objective-C语言核心语法

      发布时间:2015年11月3日 15:45分    来源:51Code采编    关键词:C++开发         | 上一篇 | 下一篇 |


 

       定义类

 

       Objective-C类定义有一个接口和一个实现部分。与C++开发有相似的地方,但两个稍微有些混。

 

       Objective-C中的接口仅定义位并且明确的需要公开。对于实现的原因,这包括私有实例变量在大部分的实现中,因为你无法继承一个类除非你知道它多大。最近的一些实现,象Apple的64位运行时则没有这种限制。

 

       内存管理

 

       传统的,Objective-C不提供任何内存管理。在早期版本中,对象类实现一个new方法调用malloc()来创建一个新对象。当使用完这个对象,传一个free消息。任何一个对象从NSObject继承回应一个-retain和-release消息。当你使用完这个对象,你传一个 free消息。OpenStep添加了参考计算。

 

       每一个从NSObject继承的对象都回应-retain和-release消息。当你想要保留一个指向对象的指针,你可以发送一个-retain消息。当你使用完以后,你可以发送一个-release消息。这个设计有个细微问题。通常你不需要保持一个指向对象的指针,但是你也不想释放。一个典型的例子在返回一个对象时候,调用者需要保持指向对象的指针,但你不想这么做。

 

       这个问题的解决方案就是NSAutoreleasePool类。加上-retain和-release,NSObject也回应 -autorelease消息。当你发送其中一个,和现前的自动释放池一同注册。当这个池对象被注销,它发送一个-release消息给每个对象,而对象 在这之前先收到-autorelease消息。在OpenStep应用中,一个NSAutoreleasePool实例在循环开始的时候创建,在结束的时候销毁。你也可以创建属于你自己的实例来自动释放对象。

 

       这个机制减少了一些C++所需的复制。其实也不值得这么做,在Objective-C,易变性是对象的属性,不是参考。在C++开发中,有常量指针和非常量指针。不允许在常量对象上调用非常量方法。这保证不了对象不会被改变——仅仅因为你不想改变。

 

       在Objective-C中,一个常态模式定义了一个不变的类和可变的子类。NSString就是一个典型例子。它有一个可变的子类NSMutableString。如果你得到NSString并且想保存下来,你可以传一个-retain消息并且不用复制操作 就可以保存指针。相反地,你可以传一个+stringWithString:message给NSString。不管这个参数是否可变都会检查并返回原始指针。在Apple和GNU运行时,Objective-C都支持存储性的垃圾回收,这会避免对-retain和-release的需要。在现存的框架中对语言的附加并不总是很好的支持的,并且在用的时候需要格外小心。

 

       总结

 

       既然我们已经浏览了Objective-C语言的核心,在这部分的总结我们将会看到更多的一些高级话题。