@property,@synthesize并在Objective-C中发布对象

时间:2011-05-03 11:32:16

标签: objective-c memory-management synthesizer

我正在开发iPad游戏。我遇到了这件事。这是我的示例代码:

方法1:

Foo.h

@interface Foo : UIView{
    UILabel *title;
    .... // Other objects like UISlider, UIbuttons, etc.
}

// I add @property for all the objects.
@property (nonatomic, retain) UILabel *title;

... blablabla

Foo.m
// I synthesize all the properties.
@synthesize title;
... blablabla

// Release in dealloc method
[title release];
....
[super dealloc];

方法2:

Foo.h

@interface Foo : UIView{
    UILabel *title;
    .... // Others object like UISlider, UIbuttons, etc.
}
// But this time I didn't add @property, synthesize and release.

Foo.m
// When I need the label, I allocate it:
title = [[UILabel alloc] initWithRect: CGRect(10, 10, 100, 30)];
title.text = @"test";
[self addSubview: title];
[title release];

方法1和方法2都有效,但两种方法之间有什么区别(方法2代码少)?

我应该使用哪种方法?为什么?

它与内存管理有关吗?

2 个答案:

答案 0 :(得分:0)

不同之处在于,在方法2中,您无法访问Foo对象外部的标题。实例变量对于类是私有的。

此外,您需要确保平衡alloc / retain和releases。

答案 1 :(得分:0)

方法2在技术上是不正确的,因为通过向标题发送-release表示您不再对它感兴趣。你应该把它变成零,或者更好,使它成为一个局部变量。

方法1绝对正常,并且具有以下优点:在-dealloc之外,您始终使用该属性来引用它,您无需担心获取-retain和{{1} } -对。