Методы InitWith по сравнению с методами фабрики

Я беру ObjC и Какао, которое является также моим первым серьезным набегом в программирование в целом.

Я испытываю затруднения из-за различий между initWith методами, которые называют на экземплярах и методах фабрики, которые называют на классах.

Во-первых, почему их называют методами "фабрики", и существует ли надлежащий термин для того, что я дублировал методами "InitWith"?

Во-вторых, каково функциональное различие? Это - просто последствия управления памятью (что методы фабрики возвращают автовыпущенный объект)?

Например, какова реальная разница между [NSString stringWithString: (NSString*)aString] и [[NSString alloc] initWithString: (NSString*)aString]?

6
задан Audacitor 18 July 2010 в 00:42
поделиться

3 ответа

В вашем примере

 [[NSString alloc] initwithString: (NSString     
*)aString];

Когда вы выполняете выделение, вы помещаете в память место для строки, отсюда и выделение. затем вы указываете ему инициализировать строку, равную aString. (NSString *) - это идентификатор типа объекта, поэтому вы говорите, что aString объявлена ​​как NSString.

Обычно я делаю что-то вроде

   NSString * aString = @"String value";

, объявляет, чему равен aString.

Если вы размещаете что-то в памяти для управления этим, вам нужно будет освободить это в нужное время, например, в разделе

   -(void) dealloc {} 

вашего кода.

Все, что касается NSString, можно объяснить в этой документации от Apple NSString

0
ответ дан 17 December 2019 в 04:41
поделиться

Основное отличие состоит в том, что

 [NSString stringWithString:
  (NSString*)aString] 

возвращает автоматически освобожденную строку, управление памятью которой вам не нужно, тогда как

    [[NSString alloc] initWithString: 
     (NSString*)aString]

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

0
ответ дан 17 December 2019 в 04:41
поделиться