一、普通程序猿
普通程序员使用最常见路人姿势等场。普普通通,纯属陆仁辈。

陆仁贾写法:

// view 1

UIView *v1 = [UIView alloc] initWithFrame:CGRectMake(, , , )];
v1.backgroundColor = [UIColor whiteColor]; // view 2 UIView *v2 = [UIView alloc] initWithFrame:CGRectMake(, , , )];
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(, , , )];
v.backgroundColor = [UIColor whiteColor]; v1 = v; [self.view addSubview:v1];
} // view 2
{
UIView *v2 = nil;
UIView *v = [UIView alloc] initWithFrame:CGRectMake(, , , )];
v.backgroundColor = [UIColor whiteColor]; v2 = v; [self.view addSubview:v2];
}

路人饼写法

// view 1
UIView *v1 = nil;
{
UIView *v = [UIView alloc] initWithFrame:CGRectMake(, , , )];
v.backgroundColor = [UIColor whiteColor];
v1 = v;
} // view 2
UIView *v2 = nil;
{
UIView *v = [UIView alloc] initWithFrame:CGRectMake(, , , )];
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(, , , );
that.background = [UIColor whiteColor];
}]; // view 2
UIView *v2 = [[UIView alloc] init];
[v2 z0_builder:^(UIView *that) {
that.frame = CGRectMake(, , , );
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(, , , );
v.background = [UIColor whiteColor];
v;
}); // view2
UIView *v2 = ({
UIView *v = [UIView alloc] init];
v.frame = CGRectMake(, , , );
v.background = [UIColor blueColor];
v;
}); [self.view addSubview:v1];
[self.view addSubview:v2];
}

浅谈OC对象初始化的三种姿势的更多相关文章

  1. 浅谈Java对象回收的三种方式

    半夜睡不着,加上最近在看Java虚拟机,写点给新手和自己看的东西. 第一类:生命周期中止 void scope(){ Test t = new Test(); } 第二类:对象无引用 (一).对象的应 ...

  2. 浅谈SQL Server中的三种物理连接操作

    简介 在SQL Server中,我们所常见的表与表之间的Inner Join,Outer Join都会被执行引擎根据所选的列,数据上是否有索引,所选数据的选择性转化为Loop Join,Merge J ...

  3. 浅谈SQL Server中的三种物理连接操作(HASH JOIN MERGE JOIN NESTED LOOP)

    简介 在SQL Server中,我们所常见的表与表之间的Inner Join,Outer Join都会被执行引擎根据所选的列,数据上是否有索引,所选数据的选择性转化为Loop Join,Merge J ...

  4. 浅谈SQL Server中的三种物理连接操作(Nested Loop Join、Merge Join、Hash Join)

    简介 在SQL Server中,我们所常见的表与表之间的Inner Join,Outer Join都会被执行引擎根据所选的列,数据上是否有索引,所选数据的选择性转化为Loop Join,Merge J ...

  5. 浅谈Objective-C对象初始化的三类程序猿

    序 早上看了位仁兄写了<Swift:让人眼前一亮的初始化方式>的文章.什么?!初始化?Objective-C!好吧,吓哔哔~~~ 一.普通程序猿 普通程序员使用最常见路人姿势等场.普普通通 ...

  6. $.ajax()方法详解 ajax之async属性 【原创】详细案例解剖——浅谈Redis缓存的常用5种方式(String,Hash,List,set,SetSorted )

    $.ajax()方法详解   jquery中的ajax方法参数总是记不住,这里记录一下. 1.url: 要求为String类型的参数,(默认为当前页地址)发送请求的地址. 2.type: 要求为Str ...

  7. js二维数组定义和初始化的三种方法总结

    js二维数组定义和初始化的三种方法总结 方法一:直接定义并且初始化,这种遇到数量少的情况可以用var _TheArray = [["0-1","0-2"],[& ...

  8. Java反射02 : Class对象获取的三种方式和通过反射实例化对象的两种方式

    1.Class对象获取的三种方式 本文转载自:https://blog.csdn.net/hanchao5272/article/details/79361463 上一章节已经说过,一般情况下,Jav ...

  9. Kubernetes 对象管理的三种方式

    Kubernetes 中文文档 1. Kubernetes 对象管理的三种方式对比 Kubernetes 中的对象管理方式,根据对象配置信息的位置不同可以分为两大类: 命令式:对象的参数通过命令指定 ...

随机推荐

  1. Spring事务管理

    Spring是SSH中的管理员,负责管理其它框架,协调各个部分的工作.今天一起学习一下Spring的事务管理.Spring的事务管理分为声明式跟编程式.声明式就是在Spring的配置文件中进行相关配置 ...

  2. 9.JAVA中的正则表达式

    一.JAVA中的正则表达式 1.概念:以某种特定的方式描述字符串 1.Java中正则表达式的规则 ?          #{0,1}-?有一个-或者没有 \\           #表示一个" ...

  3. UWP 设备分辨率

    之前看了下网上,分辨率都是用webview js拿或者全屏拿宽高,很有局限性. 研究一下.找到个完美的方法: public Size GetDeviceResolution() { Size reso ...

  4. pyqt5 开发环境

    pyqt5 pycharm mac下开发环境 brew install python3 安装python3 brew install pyqt5 配置pycharm http://blog.csdn. ...

  5. SQL位移运算函数

    -- ============================================= -- Author:      <maco_wang> -- Create date: & ...

  6. 关于Java导出100万行数据到Excel的优化方案

    1>场景 项目中需要从数据库中导出100万行数据,以excel形式下载并且只要一张sheet(打开这么大文件有多慢另说,呵呵). ps:xlsx最大容纳1048576行 ,csv最大容纳1048 ...

  7. block fomating context

    http://www.w3help.org/zh-cn/kb/010/ 它与普通的块框类似,不同之处在于: 1可以包含浮动元素 2可以阻止外边距折叠 3可以防止元素被浮动元素覆盖 placeholde ...

  8. iOS typedef NS_ENUM 与 NSString

    //在头文件中声明 typedef NS_ENUM(NSUInteger, TransactionState) { TransactionOpened, TransactionPending, Tra ...

  9. BZOJ4078 : [Wf2014]Metal Processing Plant

    设$D(A)\leq D(B)$,从小到大枚举$D(A)$,双指针从大到小枚举$D(B)$. 那么对于权值不超过$D(A)$的边,可以忽略. 对于权值介于$(D(A),D(B)]$之间的边,需要满足那 ...

  10. 咪咕视讯与美国AR公司ODG达成战略合作,联合打造尖端产品

    昨日,中国移动下属生态公司咪咕视讯科技有限公司(简称咪咕视讯)与美国AR公司Osterhout Design Group (ODG)达成战略合作.本次合作将充分发挥ODG的先进技术优势,与咪咕视讯共同 ...