zoukankan      html  css  js  c++  java
  • 浅谈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];
    }
  • 相关阅读:
    Saltstack module gem 详解
    Saltstack module freezer 详解
    Saltstack module firewalld 详解
    Saltstack module file 详解
    Saltstack module event 详解
    Saltstack module etcd 详解
    Saltstack module environ 详解
    Saltstack module drbd 详解
    Saltstack module dnsutil 详解
    获取主页_剥离百度
  • 原文地址:https://www.cnblogs.com/weiboyuan/p/5955126.html
Copyright © 2011-2022 走看看