首页 > 代码库 > 浅谈OC对象初始化的三种姿势

浅谈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 1UIView *v1 = nil;{    UIView *v = [UIView alloc] initWithFrame:CGRectMake(0, 0, 200, 100)];    v.backgroundColor = [UIColor whiteColor];    v1 = v;}// view 2UIView *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];

 

二、文艺程序猿
文艺程序猿,使用教科书姿势登场。使用builder模式。使用block隔离初始化代码。

首先给NSObject增加扩展接口

// 扩展NSObject,增加Builder接口@interface NSObject (Builder)+ (id)z0_builder:(void(^)(id that))block;- (id)z0_builder:(void(^)(id that))block;@end
// 实现@implementation NSObject (Builder)+ (id)z0_builder:(void(^)(id))block {    id instance = [[self alloc] init];    block(instance);    return instance;}- (id)z0_builder:(void(^)(id))block {    block(self);    return self;}@end

 

使用。代码简洁工整。处处都是文艺范。

- (void) foo {// 使用// view 1UIView *v1 = [UIView z0_builder:^(UIView *that) {    that.frame = CGRectMake(0, 0, 320, 200);    that.background = [UIColor whiteColor];}];// view 2UIView *v2 = [[UIView alloc] init];[v2 z0_builder:^(UIView *that) {    that.frame = CGRectMake(0, 0, 320, 200);    that.background = [UIColor whiteColor];}];// 添加到父视图[self.view addSubview:v1];[self.view addSubview:v2];}

 

三、二逼程序猿
最后入场的是二逼程序猿。

!#!@#@%&……&%&#¥%!@#¥!@#¥!!!!! 这个是什么卵?
其实....我也不知道!>_<# 自行领悟。
黑科技?????呵呵~~ 我就是代码少,你吹啊~~

- (void) foo {// view 1  UIView *v1 = ({      UIView *v = [UIView alloc] init];      v.frame = CGRectMake(0, 0, 320, 200);      v.background = [UIColor whiteColor];      v;  });  // view2  UIView *v2 = ({      UIView *v = [UIView alloc] init];      v.frame = CGRectMake(0, 120, 320, 200);      v.background = [UIColor blueColor];      v;  });  [self.view addSubview:v1];  [self.view addSubview:v2];}

浅谈OC对象初始化的三种姿势