-1

私は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つの方法の違いは何ですか(method2のコードは少ないです)。

どの方法を使用する必要があり、その理由は何ですか?

それはメモリ管理と関係がありますか?

4

2 に答える 2

0

違いは、方法2では、Fooオブジェクトの外部からタイトルにアクセスできないことです。インスタンス変数はクラス専用です。

また、割り当て/保持とリリースのバランスをとることを確認する必要があります。

于 2011-05-03T11:36:26.240 に答える
0

方法2は、タイトルに送信-releaseすることで、もう興味がないことを示すため、技術的に正しくありません。直後にnilにするか、ローカル変数にする必要があります。

方法1は完全に問題なく、常にプロパティを使用して参照する場合を除いて、取得と正しい-deallocことを心配する必要がないという利点があります。-retain-release

于 2011-05-03T13:40:32.930 に答える