浅谈OC对象初始化的三种姿势
一、普通程序猿
普通程序员使用最常见路人姿势等场。普普通通,纯属陆仁辈。
陆仁贾写法:
// view 1 UIView *v1 = [UIView alloc] initWithFrame:CGRectMake(0, 0, 200, 100)]; v1.backgroundColor = [UIColor whiteColor]; // view 2 UIView *v2 = [UIView alloc] initWithFrame:CGRectMake(0, 120, 200, 100)]; v2.backgroundColor = [UIColor whiteColor]; // add to view [self.view addSubview:v1]; [self.view addSubview:v2];
撸人已写法:撸人已明显比陆仁贾聪明多了。使用大括号隔离,view1与view2相互独立,创建代码变量不会相互污染。
// view 1
{
UIView *v1 = nil;
UIView *v = [UIView alloc] initWithFrame:CGRectMake(0, 0, 200, 100)];
v.backgroundColor = [UIColor whiteColor];
v1 = v;
[self.view addSubview:v1];
}
// view 2
{
UIView *v2 = nil;
UIView *v = [UIView alloc] initWithFrame:CGRectMake(0, 120, 200, 100)];
v.backgroundColor = [UIColor whiteColor];
v2 = v;
[self.view addSubview:v2];
}路人饼写法
// view 1
UIView *v1 = nil;
{
UIView *v = [UIView alloc] initWithFrame:CGRectMake(0, 0, 200, 100)];
v.backgroundColor = [UIColor whiteColor];
v1 = v;
}
// view 2
UIView *v2 = nil;
{
UIView *v = [UIView alloc] initWithFrame:CGRectMake(0, 120, 200, 100)];
v.backgroundColor = [UIColor whiteColor];
v2 = v;
}
[self.view addSubview:v1];
[self.view addSubview:v2];二、文艺程序猿
文艺程序猿,使用教科书姿势登场。使用模板方法模式。使用block隔离初始化代码。
谢谢@ArthurK的指正。使用模板方法来进行对象初始化。
首先给NSObject增加扩展接口
// 扩展NSObject,增加Builder接口
@interface NSObject (Creator)
+ (instancetype)z0_create:(void(^)(id that))block;
- (instancetype)z0_create:(void(^)(id that))block;
@end
// 实现
@implementation NSObject (Creator)
+ (instancetype) z0_create:(void(^)(id))block {
instancetype instance = [[self alloc] init];
block(instance);
return instance;
}
- (instancetype) z0_create:(void(^)(id))block {
block(self);
return self;
}
@end使用。代码简洁工整。处处都是文艺范。
- (void) foo {
// 使用
// view 1
UIView *v1 = [UIView z0_create:^(UIView *that) {
that.frame = CGRectMake(0, 0, 320, 200);
that.background = [UIColor whiteColor];
}];
// view 2
UIView *v2 = [[UIView alloc] init];
[v2 z0_create:^(UIView *that) {
that.frame = CGRectMake(0, 0, 320, 200);
that.background = [UIColor whiteColor];
}];
// 添加到父视图
[self.view addSubview:v1];
[self.view addSubview:v2];
}三、二逼程序猿
最后入场的是二逼程序猿。
!#!@#@%&……&%&#¥%!@#¥!@#¥!!!!! 这个是什么卵?
其实....我也不知道!>_<# 自行领悟。
黑科技?
浙公网安备 33010602011771号