Objective C 2.0的一些新特性介绍

Posted on 2008-04-15 20:53  Stephen.lau  阅读(5799)  评论(4编辑  收藏  举报

  Objective C 2.0的一些新特性介绍

    前两天在一朋友那儿,看到Apple公司最近发布的关于Objective C 2.0编程语言的介绍文档,呵呵,是全英文的哦!这两天忙里偷闲,看了一些,大致了解了一些Objective C 2.0相对于原来的Objective-C语言的一些改变情况。现在把Objective C 2.0的一些新特性介绍一点,和大家分享一下愚见。咱不仅要在硬件上啃苹果,也要在软件、内核编程上用力的咬上一口,哈哈,还蛮爽!(小弟英语很一般,有些地方翻译和理解的不到位的地方,大家多多斧正!)

Apple向来对产品未来方向很有感觉,它在GCC的源代码库中拥有自己的一个独立分支,这些分支多数是开源的,所以对应的GCC编译器是免费的,但Objective-C 2.0的运行库不是免费的。

Objective-C 2.0Objective-C的升级相当的好的, 新特性非常实用, 没有额外增加不必要关键字,而今天的C++看起来更加混乱。C++模板那些概念在Objective-C这样可以用弱类型的语言里面看起来都是不太必要的。

根据文档的介绍,Objective C 2.0主要突出了以下几点新的特性:
    (1)   属性(property):
                原来写Cocoa类一个头大的问题就是得写N多的setter getter,尤其是遇到复杂的类时,这个工作简直就是体力活。ObjC2.0里提供了新的@property功能,能够帮助程序员解除这个烦恼,不用那么麻烦写一堆setter and getter
          

    (2) 垃圾回收器(garbage collection):

           
呵呵,终于可以不用处理内存溢出的Bug,它是像我这样粗心大意的人最喜欢的特性了。Objective-C 2.0加入了新的关键字来实现GC, 以及需要支持GC的标准库程序

    (3)带属性的方法:

          
声明某个方法的时候, 可以指定该方法的一些属性, 比如通过寄存器传递参数, 保存结果作为方法的Cache等等,甚至声明某个方法已经被遗弃等


    (4)模糊接口定义

      引入了@optional @required 关键字,  一个接口中可以同时有一定要实现的方法和可选择实现的方法

    (5)带实现的接口

              Objective-C
不支持多重集成, java一样, 这是一个设计的考虑, Objective-C有一种叫categories的方法可以扩展一个现有的类, 当然也可以定义接口。Objective-C2.0新的特性定义的接口可以有一个默认的实现(接口本来是不可以有实现的), 继承这个接口类如果没实现该方法, 就使用默认的

    (6)著名的超级好用的 foreach ,现在 java中好象也有这个特性

下面对以上新的特性做以下详细介绍:
                (1)   属性(property):
           
                     ①定义属性关键字:@property
        ②
定义位置:一般在一个类的接口(@interface)内,和方法定义在一起,还可以在协议(protocol)、种类(category)中进行定义

        ③定义格式:@property(属性1[,属性2…]类型名称(变量)        
                                                // @property ( attribute [,attribute2,…]) type name (variable );

                  其中属性(attribute)和变量(variable)可以省略,attribute默认是readwriteassignvariable默认和类型名称(name)是一致的,Variable必须是在interface里定义的变量。(在64bit里如果variable没有定义,XCode甚至可以自动添加对应的变量)

举例如下:

// 在接口里面定义属性

@interface MyClass : NSObject

{

NSString *value;

}

@property(copy, readwrite) NSString *value;

@end

@implementation MyClass

@synthesize value;

@end

     使用时可以通过MyClass.value来访问value变量,propertycopy属性表明这个变量必须支持NSCopying协议。propertyreadwrite属性表明这个变量的属性可以被读写。

            Attribute还可以是assignReadonlyretainnonatomic。分别表示该属性可以被赋值、只能被读取、保持上一次被赋的值和不自动从寄存器传递数值。

            attribute还可以为assign(默认),assign就类似C的直接指针赋值,只传递对象内存位置,并不拷贝或者retain该对象。最典型的例子就是setDelegate:这样的方法设置一个delegatedelegate由于是一个不由被赋值类控制的对象,所以采用assign方式赋值。

-------->> 未完待续

             (注:呵呵,有点饿了,先去煮碗面吃去。。。)

Copyright © 2024 Stephen.lau
Powered by .NET 8.0 on Kubernetes