• 浅谈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];
    }
  • 相关阅读:
    iOS开发 日常错误积累
    Linux编程---I/O部分
    Binder机制1---Binder原理介绍
    hdu4405概率dp入门
    SSL连接建立过程分析(1)
    用GDB调试程序(一)
    RBAC权限管理
    HDU3930(离散对数与原根)
    Java实现 蓝桥杯VIP 算法提高 特殊的质数肋骨
    Java实现 蓝桥杯VIP 算法提高 产生数
  • 原文地址:https://www.cnblogs.com/weiboyuan/p/5955126.html
Copyright © 2020-2023  润新知