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

陆仁贾写法:

// 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. 为什么在soui中加载JPG文件失败

    在SOUI中解决解码器是一个独立的模块.不同的解码器决定了程序中能够加载什么样的图片类型.使用SComMgr来加载SOUI的模块时,debug模式下默认的图片解码器是imgdecoder-png.这个 ...

  2. AMD and CMD

    AMD 规范在这里:https://github.com/amdjs/amdjs-api/wiki/AMDCMD 规范在这里:https://github.com/seajs/seajs/issues ...

  3. iOS--异步下载

    #import "ViewController.h"#import "UIImageView+WebCache.h"@interface ViewControl ...

  4. 分布式缓存技术memcached学习(二)——memcached基础命令

    上文<linux环境下编译memcahed>介绍了memcahed在linux环境下的安装以及登录,下面介绍memcahed的基本命令的使用. Add 功能:往内存增加一条新的缓存记录 语 ...

  5. jQuery对数据和对象的操作

    <script type="text/javascript" src="jquery-1.8.2.min.js"></script> & ...

  6. 为什么<b></b>不推荐使用

    曾经在网上看见说:不推荐是用b标签,咦,我好像用过不少,难道我又坑了别人……度娘是这样说的:只要是从网页的简洁性和搜索引擎的友好度来看的.<b>是加粗,和css的font-weight在视 ...

  7. osg中内嵌QtBrowser

    最近看到osg Examples的osgQtBrowser例子, 觉得效果还是挺好的, 想加入到自己的项目中来, 就这样的搬运工作也出问题了-__- 拷过来的是这一段: osg::ref_ptr< ...

  8. 图片过大,在div中不压缩的居中方法

    在图片全屏轮播时,为了兼容更大的屏幕,我们常常把图片设置为很大,但是在显示的过程中,如果让图片随浏览器自动变化的话,常常会把图片压缩变形,影响显示,在不压缩图片的情况下,如何只显示图片的中间部分呢? ...

  9. windows下调试virtualbox的虚拟机串口

    1.我不知道其他人是怎么实现的,我是这么实现的. 2.下载一个叫做VSPD的软件,其作用是在windosw上虚拟几个串口出来. 下载完了安装,安装完了注册,如果不是花钱买来的,那就自己想办法注册吧.我 ...

  10. 从网易与淘宝的font-size思考前端设计稿与工作流

    本文结合自己对网易与淘宝移动端首页html元素上的font-size这个属性的思考与学习,讨论html5设计稿尺寸以及前端与设计之间协作流程的问题,内容较多,但对你的技术和工作一定有价值,欢迎阅读和点 ...