2011-10-02 1 views
0

Я вижу, что свойство и синтез используются без «объявления переменной» сначала .. и я немного смущен о том, какие свойства использовать. Я хочу выделить и запустить свой viewController в AppDelegate, а затем убедиться, что он есть на оставшуюся часть прогона. Ясно, что я хочу сохранить свойство? .. , однако .. поскольку alloc возвращает viewController с сохранением счетчика 1, он намного шире, чем просто использовать оставить свойство сохранения. Ни один другой класс не будет использовать моего сеттера, так что мне все равно?Xcode путаница - свойство и синтезировать, сохранить?

Ex.

в AppDelegate.h:

@propert(nonatomic,retain) MyViewController *myViewController; 

в AppDelegate.m:

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

или ..

в AppDelegate.h:

@propert(nonatomic) MyViewController *myViewController; 

в AppDelegate.m:

@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 может даже не беспокоиться о вызове метода dealloc appDelegate, это будет полная трата времени. – zaph

+0

Не могли бы вы предоставить ссылки, подтверждающие это предположение? – tobiasbayer

+0

Выяснил это. Ответ отрегулирован. – tobiasbayer

3

Вам больше не нужно определять переменные экземпляра для свойств - @synthesize делает это за вас.

Что касается вашего другого вопроса - вы можете сделать это в любом случае, но не забудьте выпустить его в своем -dealloc. Мне нравится (nonatomic, retain), потому что он очень понятен и прост в использовании/понимании. Все, что вам сделать, это правопреемник и делает все остальное:

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

В вашей -dealloc:

self.myViewController = nil; 

В случае ручного отпускания вы можете забыть о свойствах на все и использовать только переменный экземпляр как это:

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

В вашей реализации:

_myViewController = [[ViewController alloc] init]; 

В вашей -dealloc:

[_myViewController release]; 
_myViewController = nil; 

Обратите внимание, что последнее назначение nil может быть ненужным, но у меня было слишком много дефицитных след ошибок с этим (и именно поэтому я люблю нераспределенное свойство - все вам нужно установить их в нуль).

Я стараюсь всегда идти с сохраненными свойствами, так как это экономит мне некоторые мозговые циклы, и я не забочусь о наносекунде, которую я мог бы сэкономить для CPU в противном случае.

0

вариантов, я предпочитаю объявлять недвижимость с retain. это документация для вас, и это может спасти вас от глупых ошибок из-за таких инструментов, как статический анализ. так как ваш класс владеет контроллером, его следует объявить, что он содержит ссылку на него, независимо от деталей реализации. отклонение от обычных идиом - хороший способ ввести ошибки. вы также должны объявить его readonly.

 Смежные вопросы

  • Нет связанных вопросов^_^