Объявление объекта в Objective-C - PullRequest
3 голосов
/ 10 июня 2010

Есть ли разница в объявлении объектов в Objective-C между (1) и (2), помимо стиля и личных предпочтений?

(1) Однострочная декларация, выделение, инициализация.

Student *myStudent = [[Student alloc] init];

(2) Многострочное объявление, выделение, инициализация.

Student *myStudent;
myStudent = [Student alloc]; 
myStudent = [myStudent init];

Ответы [ 3 ]

4 голосов
/ 10 июня 2010

Нет, разницы нет.[Student alloc] просто выделяет память для указателя, в то время как [myStudent init] фактически устанавливает начальные значения.

Если вы знакомы с C, думайте о alloc как о

Student *myStudent = calloc(1, sizeof(Student));

И вызов init как функция, которая устанавливает начальные значения.

2 голосов
/ 10 июня 2010

Нет, без разницы.

2 голосов
/ 10 июня 2010

Во втором случае вы можете инициализировать один и тот же объект более одного раза. Вы отправляете alloc сообщение классу, чтобы получить неинициализированный экземпляр, который затем необходимо инициализировать, имея несколько способов сделать это:

NSString *myStr = [NSString alloc];
NSString *str1 = [myStr init]; //Empty string
NSString *str2 = [myStr initWithFormat:@"%@.%@", parentKeyPath, key];
...