objective-c - nonnull - objective c optional property




Objective-C:NULL, nil 및 @ ""의 차이점은 무엇입니까? (4)

"NSNull 클래스는 nil이 값 (일반적으로 배열이나 사전과 같은 컬렉션 객체)에서 금지되는 상황에서 null 값을 나타내는 데 사용하는 단일 객체를 정의합니다." null을 사용할 수있는 곳이면 어디에서도 nil을 사용할 수 있습니다. 가장 큰 차이점은 메시지를 nil로 보낼 수 있기 때문에 null can not work가있는 곳에서도 사용할 수 있다는 것입니다. 일반적으로 nil 만 사용하십시오. 그게 정확히 무슨 일이 일어나는지, 프로그래머는 컨트롤러 배열에 널 객체를 넣는 것을 선택합니다. 여기서 nil은 값으로 허용되지 않습니다.

null이 0x0에 대한 포인터이고, nil이 존재하지 않는 objective-c 객체이고 Nil이 존재하지 않는 objective-c 클래스 인 문맥 참조인데 기술적으로는 모두 0뿐입니다. 또한 NULL이 아니라 null - null는 Java 또는 C #이지만 Objective-C에는 없습니다.

당신이 말하는 방법을 쉽게하거나

그들은 모두 0이지만 "NULL"은 void *이고 "nil"은 id이며 "Nil"은 클래스 포인터입니다.

제목에서 알 수 있듯이, NULL , nil@"" 의 차이점은 무엇입니까?

예를 들어 사전에있는 문자열을 검사하려면 비어 있습니다.

어떤 조건을 사용해야합니까?

if ([dictionary objectForKey:@"aString"] == nil)

또는

if [[dictionary objectForKey:@"aString"] isEqualToString:@""]

또는

if ([dictionary objectForKey:@"aString"] == NULL)

어느 것이 옳은가?


nil 은 objective-c 객체에 대한 NULL과 유사합니다. 실제로 그들은 동일합니다 :

 //MacTypes.h
 #define nil NULL

그래서

if ([dictionary valueForKey:@"aString"]==nil)
if ([dictionary valueForKey:@"aString"]==NULL)

객관적인 c 유형을 검사 할 때 첫 번째 줄이 더 정확하지만 사전에 특정 키가 있는지 확인합니다.

약:

if ([[dictionary valueForKey:@"aString"] isEqualToString:@""])

이 줄은 사전에 "aString"키가있는 항목이 있는지 확인하고 그 항목을 빈 문자열과 비교합니다. 결과는 다음 중 하나가됩니다.

  • 키에 해당하는 항목이 없으면 false입니다.
  • 키에 대한 항목이 있고 그 항목이 빈 문자열이면 true입니다.
  • 키의 객체가 존재하고 -isEqualToString: message에 응답하지 않으면 충돌이 발생할 수 있습니다 -isEqualToString:

따라서 필요에 따라 1 행을 사용해야합니다. 그렇지 않으면 항목이 존재하고 빈 문자열이 아닌지 검사를 결합해야하는 경우 2 조건이 필요합니다.

if ([dictionary valueForKey:@"aString"]==nil ||
               [[dictionary valueForKey:@"aString"] isEqualToString:@""])

nil 은 Objective-C 객체에 대한 널 포인터를 나타 내기 위해 사용됩니다. Nil 은 Objective-C 클래스에 대한 널 포인터를 나타 내기 위해 사용됩니다. NULL 은 다른 것에 대한 널 포인터를 나타내는 데 사용됩니다.

이 모든 것들은 0의 숫자 값을 가지고 있습니다. 그들은 모두 0이지만 "NULL"은 void *입니다. "nil"은 id이고 "Nil"은 클래스 포인터입니다.

@ "" 는 빈 문자열을 나타내는 데 사용되거나 길이가 0 인 문자열을 말합니다.


없음NULL 은 존재하지 않음을 나타냅니다.
@ "" 은 존재를 나타내며 비어 있습니다.





null