3 | 对象和消息传递

来源:互联网 发布:淘宝卖烟丝的怎么搜索 编辑:程序博客网 时间:2024/05/16 12:01

使用NSObject类的alloc方法可以为对象分配内存,将对象的实例变量初始化为0。但是alloc方法既没有将该对象的实例变量初始化为合适的值,也没有为这个对象准备其他必须的对象和资源。

NSObject提供了init方法可以完成对象初始化的基础任务。

通常使用一行代码就可以分配和初始化实例:[[ClassName alloc]init];


重构

真特么的高大上的名字。官方解释:在不更改外部行为的情况下重新构建现有的代码。麻痹的不就是修改部分功能吗。


工厂方法

工厂方法是指用于创建和初始化类的便捷方法,他们是类方法。

eg:

- (id)initWithName:(NSString *)name;

+ (id)PeopleWithName:(NSString *)name;


@implementation

+ (id)PeopleWithName:(NSString *)name {

return [[[self class] alloc] init];

}

@end

创建工厂方法的名称与初始化方法的名称类似,但是它含有类名前缀。


消息转发

相关方法:

forwardingTargetForSelector: (快速转发)

&

forwardInvocation:(标准转发)

如果你拥有一个定义了对象能够消化哪些消息的目标类,快速转发可以取得很好的效果。否则你就应该使用标准转发。

快速转发eg:

@interface Two : NSObject

- (void)youCanNotDo;

@end

@implementation Two

- (void)youCanNotDo {

NSLog(@"你做不到");

}

@end



@interface One : NSObject

- (void)youCanNotDo;//最好是给NSObject写一个含有该方法的分类,然后引用

@property(nonatomic)Two two;

@end

@implementation One

- (void)viewDidLoad {

[super viewDidLoad];

_two = [[Two alloc]init];

[self youCanNotDo];//会报错

}

- (id)forwardingTargetForSelector:aSel {

if(_two respondsToSelector:aSel) {//判断目标类是否能够处理

return _two;

}

return nil;

}

@end

分类在Objective-C File文件里。



0 0
原创粉丝点击