2012-07-09 106 views
4

因此,我有很多自定义对象可能包含大量数据,或者根据用户的输入数据很少。如果只需要一点点,我显然不希望为大量数据创建存储。所以我听说过初始化,听起来像我想要的;我只是无法让它工作。这是我尝试的一个示例:懒惰初始化不起作用iPhone

@synthesize name; 

... 

- (NSString *)name { 
    if (!name) name = [[NSString alloc] init]; 
    return name; 
} 

,然后其他

myObject.name = localName; 

某处如果我allocinit myObject的在它的初始名称,然后能正常工作。但是,当我尝试上述懒惰初始化时,对象的名称在尝试设置后变为nil。我究竟做错了什么?

+0

ARC是否打开?这是iOS 5/4,还是手动引用计数? – Linuxios 2012-07-09 00:49:24

+0

是ARC打开了,这是iOS 5 – Garrett 2012-07-09 00:51:15

回答

3
@property (strong) NSString *name; 

@synthesize name = _name; 

- (NSString *)name { 
    if (!_name) { 
     _name = [[NSString alloc] init]; 
     ... 
    } 
    return _name; 
} 
+0

我是用这个而不是我的getter,还是我需要实现两者? – Garrett 2012-07-09 00:52:32

+0

@Garrett,你可以在需要的时候通过self.name来访问它 – coneybeare 2012-07-09 00:55:10

+0

这与OP在问题中的功能不同 - 如果没有指定变量名称,那么@ @ synthesize'会创建它,其名称与财产。你能解释为什么你认为这会有帮助吗? – 2012-07-09 01:05:30