По моему разумению выделенный объект не имеет смысла без его инициализации,
, если вы alloc
объект, первый, а затем позже планируется инициализировать его, может быть случай, когда вы можете забыть инициализировать объект и дать прямой вызов любому из его методов экземпляра, который приведет к ошибке времени выполнения.
Пример:
NSString *str = [NSString alloc];
// Override point for customization after application launch.
self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
NSLog(@"%ld",str.length);
Когда я запускаю приведенный выше код я получаю это в моей консоли
Did you forget to nest alloc and init?
*** Terminating app due to uncaught exception 'NSInvalidArgumentException',
reason: '*** -length only defined for abstract class. Define -[NSPlaceholderString length]!'
, если я бы ниже, я бы до сих пор получить исключение, как ул не инициализируется, поскольку все, что инициализируется, не потребляется или не заостряется на странице
[str init];
Поэтому, если вы хотите сделать это в двух строках должно быть, как это
NSObject *someObject = [NSObject alloc];
someObject = [someObject init];
Но это всегда лучше держать их вложенная
NSObject *someObject = [[NSObject alloc]init];
Если вы планируете делать это на одной линии, а затем использовать ключевое слово new
, которое поддерживает назначение и инициализацию в одной строке.
Пример:YourClass *object_ofClass = [YourClass new];
им угадать, потому что вы не можете сделать что-нибудь полезное с не-inited объекта, так почему отдельные звонки вне дома? в качестве альтернативы вы можете просто перейти на [NSObject new]; 'который является удобным методом для выделения и инициализации – Fonix