Objective-C 2.0 新特性介绍

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


Objective-C 2.0对Objective-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默认是readwrite和assign,variable默认和类型名称(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变量,property的copy属性表明这个变量必须支持NSCopying协议。property的readwrite属性表明这个变量的属性可以被读写。

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值