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

陆仁贾写法:

// 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. hbase集群的启动,注意几个问题

    1.hbase的改的会影响器他的组件的使用, 故而, 在修改 hadoop的任何组件后, 一定要记得其它的组件也能受到影响, 一下是我在将hadoop的集群改了之后 , 再次运行hbase的时候, 就 ...

  2. C语言SOCKET编程指南

    1.介绍 Socket 编程让你沮丧吗?从man pages中很难得到有用的信息吗?你想跟上时代去编Internet相关的程序,但是为你在调用 connect() 前的bind() 的结构而不知所措? ...

  3. Semaphore

    信号量玩的也是aqs的state. package com.hust.grid.leesf.semaphore; import java.util.concurrent.Semaphore; clas ...

  4. 三言两语之js事件、事件流以及target、currentTarget、this那些事

    厉害了我的哥--你是如此简单我却将你给遗忘   放假前再看某文档,里边提到两个我既熟悉又陌生的概念target.currentTarget,说他熟悉我曾经看到过这两个事件对象的异同处,说他陌生吧?很不 ...

  5. 【游戏开发】小白学Lua(上)

    在很多游戏中,脚本语言是不可或缺的一部分,很多游戏都使用到了Lua,js,python一类的脚本,脚本语言可以在很多方面给开发进程带来帮助.脚本语言可以作为初始化文件读入变量和游戏数据的一个快速而方便 ...

  6. Linux 压缩解压

    压缩解压 ------------------------------------------ linux 下所有的压缩格式,WinRAR 都支持 gzip .gz 格式 压缩文件: gzip 文件名 ...

  7. HDU4609 & FFT

    关于这道题请移步kuangbin爷的blog:http://www.cnblogs.com/kuangbin/archive/2013/07/24/3210565.html 感觉我一辈子也不能写出这么 ...

  8. poj1236Network of Schools Tarjan裸题

    其实就是手打了个Tarjan的模板 输出的时候注意是入度为0的点的个数和max(入度0的个数,出度0的个数),在n=1时特判为0即可 ——以后图论要渐渐模板化,方便使用 #include <cs ...

  9. spring task 配置

    Spring对Quartz作了一个封装,同时,Spring自己也提供了一个任务定时器(spring-task),现把它总结一下.    对于Quartz,我们使用的时候主要是注重两个方面,一个是定时任 ...

  10. iOS开发-删除字典中的null

    删除字典中的null 我们在处理数据库接口的过程中,如果数据中出现null,我们是没法处理的.我在使用NSUserDaults保存后,出现崩溃. null产生原因 null是后台在处理数据的时候,如果 ...