美文网首页Swift
【Swift语言】Lazy Initializtion延时初始化

【Swift语言】Lazy Initializtion延时初始化

作者: Magenta_she | 来源:发表于2016-08-30 15:06 被阅读73次

    Lazy Initialization,简单来说,就是在需要用到这个属性时,再对它进行初始化,以达到优化性能的作用。

    Objective-C中的延时初始化

    //ClassA.h
    @property (nonatomic, strong) NSMutableArray *players;
    //ClassA.m
    -(NSMutableArray *)players {
         if(!_players) {
            _players = [[NSMutableArray alloc] init];
       }
         return _players;
    }
    
    

    初始化ClassA后,_players是nil,只有当访问players属性时,getter方法才会被调用,并进行初始化。可见,属性初始化在对象初始化之后。

    Swift中的延时初始化

    • 使用场景一:对象初始化前,属性的初始值未知。比如在这个例子中,personalizedString包含name,所以只有在初始化对象后才能获得name。
    class Person {
         var name:String
         lazy var personalizedString: String = {
             [unowned self] in
             return "Hello,\(self.name)!"
       }()
          init(name: String) {
               self.name = name
      }
    }
    //初始化Person时,personalizedString还没有被创建
    let person = Person(name:“Magenta”)
    //当使用personalizedString时,它被创建出来,并且包含了name
    print(person.personalizedString)
    //输出“Hello,Magenta!"
    
    
    • 使用场景二: 某个属性的值需要密集的计算
    class MathHelper {
            lazy var pi : Double = {
            //计算pi的值
            return resultsOfCalculation
       }()
    }
    

    参考博客:
    LAZY 修饰符和 LAZY 方法
    Lazy Initialization with Swift

    相关文章

      网友评论

        本文标题:【Swift语言】Lazy Initializtion延时初始化

        本文链接:https://www.haomeiwen.com/subject/jwjnsttx.html