浅谈OC对象初始化的三种姿势
Posted 韦韦韦
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了浅谈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];
二、文艺程序猿
文艺程序猿,使用教科书姿势登场。使用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 1 UIView *v1 = [UIView z0_builder:^(UIView *that) { that.frame = CGRectMake(0, 0, 320, 200); that.background = [UIColor whiteColor]; }]; // view 2 UIView *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对象初始化的三种姿势的主要内容,如果未能解决你的问题,请参考以下文章
bzoj3224Tyvj 1728 普通平衡树 平衡树的三种姿势 :splay,Treap,ScapeGoat_Tree