2010-11-12 2 views
0

для экземпляра MyObject, есть ли разница междуМетоды проверки действительного объекта в Objective C?

, если (MyObject == ноль)

и

, если (MyObject)

Мои Предположим, что если myObject не был выделен и инициализирован, он будет равен нулю, а два синонима.

ОБНОВЛЕНИЕ: Извините, я неправильно сформулировал свой вопрос, но, думаю, вы ответили, что я действительно спрашиваю. Позвольте пояснить:

У меня есть два стола, каждый из которых имеет свой собственный viewController, tblVC1 и tblVC2. Для пользователя нажмите на строку таблицы, viewController настроит поксор contentViewController, contentVC, который имеет свойства tblVC1 и tblVC2. Поэтому, если кран пользователя обрабатывается tblVC1, он устанавливает contentVC.tblVC1 = self, а свойство tblVC2 не инициализируется.

Когда мне нужно перезвонить запускающий ViewController я проверял, для которых ViewController назвать так:

if (tblVC1) { 
    [tlbVC1 callTheMethod]; 
} else { 
    [tlbVC2 callTheMethod]; 
} 
Так что я должен был спросить: есть if (tblVC1) такие же, как if (tblVC1 != nil)?

ответ

5

if(myObject) проверяет, указывает ли myObject на область памяти! = 0x0 и if(myObject == nil) проверяет, указывает ли myObject на 0x0. О, и myObject по умолчанию не будет NULL, но только если он является ivar класса ObjC, в противном случае он укажет на фрагмент случайной памяти.

(Отказ от ответственности:. Запрос на новую странице памяти на прошивке и Mac OS X приведет к чистой странице памяти, что означает, что MyObject бы в этом случае NULL Но я бы не полагаться на это)

+0

Спасибо за ваш ответ, это помогло мне понять, о чем я действительно спрашиваю. Я обновил свой пост, чтобы уточнить мой вопрос. – seeker12

+0

Да, если (tblVC1) оценивает в этом случае так же, как если бы (tblVC1! = Nil). Кстати, отправка сообщения NULL в objc-c обнаруживается средой выполнения и не будет делать ничего плохого (хотя вы должны всегда проверять указатели!). Вы также можете проверить, указывает ли tlbVC2 на что-то, просто чтобы убедиться, что операция распределения не сработала. – JustSid

+0

Спасибо за возвращение. Отличный ответ (хотя я не знаю, что вы имеете в виду, всегда проверяя указатели). – seeker12

2

Исправить. Подробное обсуждение nil и значений по умолчанию доступно на Cocoa with Love.

Редактировать: JustSid имеет право указывать, что это гарантируется только переменными экземпляра.

+0

Отличная ссылка, спасибо. – seeker12

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