Методы проверки действительного объекта в Objective C? - PullRequest
0 голосов
/ 13 ноября 2010

Для экземпляра myObject существует ли разница между

if (myObject == nil)

и

if(myObject)

Я предполагаю, что если myObject не был выделен и инициализирован, он будет равен нулю, а два являются синонимами.

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

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

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

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

Ответы [ 2 ]

5 голосов
/ 13 ноября 2010

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

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

2 голосов
/ 13 ноября 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...