나는 본 적이 :이것은 무엇입니까 (NSNull *) 컨트롤러 == [NSNull null]해야합니까? 왜 그냥 컨트롤러 == nil 아닌가요? 애플의 예에서
myController *controller = [viewControllers objectAtIndex:page];
if ((NSNull *)controller == [NSNull null]) {
controller = [[myController alloc] initWithPageNumber:page];
[viewControllers replaceObjectAtIndex:page withObject:controller];
[controller release];
}
나는이 라인에 매우 관심이 : 그 짓을한다면, 난 그냥 전무 점검 것이다
if ((NSNull *)controller == [NSNull null]) {
. 왜 그들은 그렇게 복잡합니까? 실제로 그게 뭐야? NSNull에 컨트롤러 객체를 캐스팅하는 것처럼 보이고 NSNull에서 null과 같은지 확인하십시오.
A.F.A.I.K. nil은 "no object"를 의미하고 null은 "nothing"을 의미합니다. 여기에 명확한 그림을 얻도록 도와주세요!
감사합니다. 그래서 (NSNull *) 컨트롤러가 NSNull 컨트롤러를 캐스팅하고 있습니까? 나는 거기에 isKindOfClass 연산자 또는 이와 비슷한 것이 있다고 생각했다. – Thanks
포인터 비교는 isKindOfClass를 호출하는 것보다 (런타임에) 빠르지 만 [controller isEqual : [NSNull null]]처럼 작동해야합니다. 컨트롤러가'id'라고 선언했다면 컴파일러 경고를 피하기 위해 캐스트를 필요로하지 않을 것입니다. –