В Какао инициализатор будет возвращать указатель объекта, если вызов был успешным, или ноль, если он не смог создать объект.
В обоих случаях проверяется наличие объекта.На самом деле, проверка на наличие указателя на объект и просто возврат, если объект не существует.В качестве примера здесь приведена распространенная форма инициализатора для объекта.
- (id)init {
// Call the superclass initialiser first and check that it was successful.
if (!(self = [super init])) {
// If the superclass initialiser failed then self will be nil.
// return a nil because we cannot create this object.
return nil; // Bail!
}
// Do more initialising
// If we can initialise the superclass and ourself, return a pointer to ourself
return self;
}
Однако предоставленных вами фрагментов недостаточно для определения правильности кода.Например, первый пример неверен, если он является частью метода инициализатора, поскольку он не возвращает какого-либо объекта.
Редактировать
Из ваших дальнейших примеров обаиз них print hiiiiiiii
NSArray *arr;
if(arr) { NSLog(@"hiiiiii");
и
NSArray *arr = [[NSArray alloc]init];
if(arr) { NSLog(@"hiiiiii");
В первом случае вы объявляете arr указателем на NSArray, но поскольку он не был инициализирован, этот указатель являетсяпросто мусор значение случайных чисел.Но это не nil
Так что ваше if-утверждение оценивается как истинное.Это не значит, что это действительный указатель на NSArray.
Во втором примере вы объявляете указатель NSArray и инициализируете его.Это было успешно инициализировано, поэтому указатель не равен nil и оператор if оценивается как true.В этом случае у вас есть действительный указатель NSArray.
Объявление не инициализируется!
Возможно, если вы объясните, что именно вы пытаетесь сделать, мы сможем лучше ответить на ваш запрос.вопросы.