2012-06-01 3 views
0

Мне просто интересно, где я должен установить значения переменных для использования во всех моих методах. Например, скажем, в моем .h Я говорю: @property NSString *name;, а затем синтезируйте его в .m. Где я могу присвоить ему значение, поэтому в моих функциях, например, -(NSString *)changeUsername:(NSString *) changes и -(void)deleteUsername, я могу получить доступ к этим данным?Командная строка Objective-C Equivalent ViewDidLoad

+0

Это какао-приложение? Вы можете попробовать: -applicationDidFinishLaunching: '. – paulmelnikow

ответ

0

Ну, вы МОЖЕТЕ сделать это в инициализаторе для своего класса, и это будет подход на C++ или, возможно, Java. В объективе-c вы обычно используете ленивую инстанцирование, и лучшее место для этого - в getter для этого свойства.

Если кому-то присваивается значение, которое вызывается сеттером, и все в порядке. Если кто-то запрашивает значение, и он еще не установлен (равен нулю), вы можете создать объект и/или присвоить значение по умолчанию в getter.

// Override accessor for name 
- (NSString*)name 
{ 
    if (!_name) { 
     _name = @"unknown"; 
    } 

    return _name; 
} 

Методы доступа - это единственное место, где вы должны напрямую обращаться к переменным экземпляра.

+0

Является ли этот инициализатор первым или в основном файле, я должен его вызвать перед любыми другими методами этого класса? – pasawaya

+1

Когда вы создаете свой объект (с main.m или где угодно), вы обычно вызываете его инициализатор, по умолчанию называемый init. Ex. MyClass * myclass = [[MyClass alloc] init]; Геттер для вышеприведенного свойства не будет называться до тех пор, пока он не понадобится, что быстрее. – Patrick

+0

никогда не будет. Я посмотрел на эту ссылку [http://stackoverflow.com/questions/10739726/when-to-use-lazy-instantiation-in-ios], и теперь я понимаю. благодаря – pasawaya

1

main() - это первое, что вызывается в командной строке. Разве вы не сделали бы это там (или где-нибудь звонили от main())?

1

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

Единственная причина, по которой приложения Cocoa Touch отложить некоторые теги инициализации до -viewDidLoad, заключается в том, что диспетчеры представлений не загружают свои представления при их инициализации, а некоторые свойства или ivars связаны с представлениями, которые будут загружены. Эти вещи явно не могут быть настроены до тех пор, пока представление не будет загружено (или создано), поэтому -viewDidLoad станет лучшим местом для создания таких вещей.

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