2011-10-02 9 views
0

私はプロパティを参照し、合成する "変数を宣言せずに"最初に使用されています。私は使用するプロパティについて少し混乱しています。私はAppDelegateで私のviewControllerを割り当ててinitし、それが実行の残りの部分にあることを確認します。明らかに私はretain-propertyを必要としていますか?.. しかし、allocはretain count 1のviewControllerを返すので、retain-propertyをそのまま残して使うほうがはるかに賢くなります。他のクラスは私のセッターを使用しないので、私は気にしない?Xcodeの混乱 - プロパティと合成、保持?

Ex。 AppDelegate.hで

:AppDelegate.mで

@propert(nonatomic,retain) MyViewController *myViewController; 

:AppDelegate.hで

@synthesize myViewController = _myViewController; 
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
    { 
     self.myViewController = [[[EventDataController alloc] init] autorelease]; 
     [self.window makeKeyAndVisible]; 
     return YES; 
    } 

か...

AppDelegate.mで
@propert(nonatomic) MyViewController *myViewController; 

@synthesize myViewController = _myViewController; 
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
    { 
     self.myViewController = [[EventDataController alloc] init]; 
     [self.window makeKeyAndVisible]; 
     return YES; 
    } 

、まっすぐに私をしてください設定します。

答えて

1

私は最初のオプションを使用します。

完了したら、myViewControllerを明示的に解放できないのはなぜですか?

"このクラスは決して他の誰にも使われない"のような仮定はしません。

+0

appDelegate deallocメソッドに何も置く必要はありません。その時点で、必要はなく、AppleはappDelegate deallocメソッドを呼び出すことさえ気にしないかもしれません。それは時間の無駄です。 – zaph

+0

この前提を裏付ける参考資料を提供できますか? – tobiasbayer

+0

それを考え出した。回答が調整されました。 – tobiasbayer

3

プロパティのインスタンス変数をもう定義する必要はありません。@synthesizeはそれを行います。

あなたの他の質問については、どちらにしてもかまいませんが、-deallocでリリースすることを忘れないでください。私は(nonatomic, retain)が好きです。なぜなら、それは非常に明確で使いやすい/理解しやすいからです。あなたが行うすべては割り当てであり、それはすべての残りの部分を行います。手動ですべてのプロパティを忘れるとだけインスタンス変数を使用したい場合があります解除する場合は

self.myViewController = nil; 

:あなたの-dealloc

self.myViewController = [[[ViewController alloc] init] autorelease]; 

をこのような:

_myViewController = [[ViewController alloc] init]; 
01:あなたの実装で

@interface MyClass: NSObject 
{ 
    ViewController* _myViewController; 
} 
@end 

あなたの-dealloc

nilの最後の割り当ては不要かもしれないが、私はこれで非常に多くの困難なトラックのバグを持っていた(と私は保持性質を好きな理由それはだと

[_myViewController release]; 
_myViewController = nil; 

注 - すべてそれらをゼロに設定する必要があります)。

私はいくつかの脳のサイクルを節約し、私はそれ以外の場合はCPUのために保存することができたナノ秒に気にしないので、私は常に保持されたプロパティと一緒にしようとします。

0

オプションの場合は、retainでプロパティを宣言することをお勧めします。これはあなたのためのドキュメントであり、静的解析などのツールのために愚かな間違いからあなたを救うことができます。あなたのクラスはコントローラーをが所有しているので、実装の詳細にかかわらず、コントローラーへの参照を保持していると宣言する必要があります。従来のイディオムからの逸脱は、バグを導入する良い方法です。それをreadonlyと宣言する必要があります。