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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了浅谈Objective-C对象初始化的三类程序猿相关的知识,希望对你有一定的参考价值。

技术分享

 

早上看了位仁兄写了《Swift:让人眼前一亮的初始化方式》的文章。什么?!初始化?Objective-C!好吧,吓哔哔~~~ 

一、普通程序猿

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

1 UIView *v = [UIView alloc] initWithFrame:CGRectMake(0, 0, 200, 100)];
2 v.backgroundColor = [UIColor whiteColor];

二、文艺程序猿

文艺程序猿,使用教科书姿势登场。使用builder模式。

首先给NSObject增加扩展接口

 1 // 扩展NSObject,增加Builder接口
 2 @interface NSObject (Builder)
 3 
 4 + (id)z0_builder:(void(^)(id that))block;
 5 
 6 - (id)z0_builder:(void(^)(id that))block;
 7 
 8 @end
 9 
10 // 实现
11 @implementation NSObject (Builder)
12 
13 + (id)z0_builder:(void(^)(id))block {
14     id instance = [[self alloc] init];
15     block(instance);
16     return instance;
17 }
18 
19 - (id)z0_builder:(void(^)(id))block {
20     block(self);
21     return self;
22 }
23 
24 @end

使用

 1 - (void) foo {
 2   // 使用
 3   UIView *v1 = [UIView z0_builder:^(UIView *that) {
 4     that.frame = CGRectMake(0, 0, 320, 200);
 5     that.background = [UIColor whiteColor];
 6   }];
 7 
 8   UIView *v2 = [[UIView alloc] init];
 9   [v2 z0_builder:^(UIView *that) {
10     that.frame = CGRectMake(0, 0, 320, 200);
11     that.background = [UIColor whiteColor];
12   }];
13 }

 

三、二逼程序猿

最后入场的是二逼程序猿。!#!@#@%&……&%&#¥%!@#¥!@#¥!!!!! 这个是什么卵?
其实....我也不知道!>_<# 自行领悟。

1 - (void) foo {
2   UIView *v = ({
3     UIView *v = [UIView alloc] init];
4     v.frame = CGRectMake(0, 0, 320, 200);
5     v.background = [UIColor whiteColor];
6     v;
7   });
8 }

 

总结

总结个鬼,就几行代码。爱干啥,干啥去~~ 下班闪人~ 白了个掰!

 

以上是关于浅谈Objective-C对象初始化的三类程序猿的主要内容,如果未能解决你的问题,请参考以下文章

浅谈Objective-C中的block那些事

Objective-C 浅谈

无法初始化类对象:Objective-C

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

如何在Objective-C中动态分配指向对象的指针数组?

浅谈Swift 2中的Objective-C指针