4

如果我有这样的财产:

@property (nonatomic, retain) UILabel* lblUsername;

我应该viewDidLoad这样做:

self.lblUsername = [[[UILabel alloc] init...] autorelease];
self.lblUsername.text = @"A label";
self.lblUsername....

或者我应该这样做:

UILabel* usernameLabel = [[UILabel alloc] init...];
usernameLabel.text = @"A label";
usernameLabel....
self.lblUsername = usernameLabel;
[usernameLabel release];

我都看过了,但我不确定我应该使用哪个,使用一个比另一个有什么好处?(我知道两者在语法上都是“正确的”并且都有效,但哪个是首选?)

4

2 回答 2

4

我更喜欢第二种方法。唯一真正的好处是减少自动释放池的压力,如果只初始化一些这样的对象,这是最小的。如果使用第一种方法,您不太可能在另一个线程上修改该属性,这可能会导致意外行为,但我认为这是一种风险。对我来说,构建组件然后安装它与安装未完成的组件然后将其构建到位似乎也是不同的。

于 2012-05-30T19:43:56.580 回答
2

我每次都会去第二个。除了在公共接口中粘贴半构建对象没有什么意义(即使您还没有可能暴露错误的代码路径)这一重要事实之外第二种方法更有效且成本为零。对于每个self.thing.otherThing =,您至少要发送两条消息,如果有一天您参与了 KVO,还会发送更多消息。这种间接性绝对没有任何好处——它不会让你的代码读起来更清晰,不会让它更简洁,不会让它更安全,什么都没有。

于 2012-05-30T19:56:03.773 回答