nil/Nil/NULL/NSNull 차이점

3604 단어
표식

속뜻
Null
(void*)0
C 포인터의 문자 0값
nil
(id)0
ObjC 객체의 문자 0값
Nil
(Class)0
ObjC 클래스의 글자 0값
NSNull
[NSNull null]
0값을 나타내는 단독 대상
NOTICE: 애플의 컴파일러가 컴파일할 때 objc 생성msgSend와 같은 방법으로 메시지를 보냅니다. 대상이 nil로 설정되었을 때, 어떤 종류의 실례적인 메시지를 찾지 않기 때문에 아무것도 하지 않습니다. 이것은 애플의 처리 방식입니다.
 obj nil:[obj message] NO, NSException
 obj NSNull:[obj message] NSException

nil, Nil, NULL 사용 비교
먼저 다음과 같은 실험을 수행합니다.
NSArray * array = [NSArray arrayWithObjects:@"good", @"morning", nil];
// array = nil; //  :0
// array = NULL; //  :0
// array = Nil; //  :0 

NSLog(@"%ld", array.count);//  , 


 Class class = [NSURL class];
// class = Nil; //  :(null)
// class = nil; //  :(null)
// class = NULL; //  :(null) 

NSLog(@"%@", class); //  ,  


int a = 10; int * p = &a;
// p = NULL; //  :0x0
// p = nil; //  :0x0// 
p = Nil; //  :0x0 

NSLog(@"%p", p); //  , 

결론:
  • nil, Nil, NULL은 사용에 있어서 별 차이가 없지만 프로그래머의 약속은 C구조의 바늘은 NULL을 사용한다.대상 포인터 사용nil;클래스 객체 포인터는 Nil을 사용합니다.
  • 또한 NSNull과nil,Nil,Null은 본질적인 차이가 있다.NSNull은 객체이고 nil, Nil, Null은 포인터에 빈 값만 부여합니다.
  • 또한 nil의 대상에게 메시지를 보내면 이상이 발생하지 않습니다.물론 Nil, NULL의 대상에게 메시지를 보내도 이상이 생기지 않는다는 것은 예에서 이미 증명되었다.그러므로 이 결론에 의하면 nil, Nil,NULL의 목적은 모두 하나의 지침에 값을 비우고 빈 지침에 메시지를 보내면 이상이 생기지 않는다는 것이다
  • NSNull은 도대체 무엇입니까?나는 지금까지 이런 종류를 호출한 적이 없다. 그러면 그것은 또 어디에서 발생한 것입니까?
  • search와 조사를 통해 나는 최종적으로 이 문제를 포지셔닝했다. 이 NSNull은AFNetworking의 함수 리셋으로 만들어진 것이다.
  • responseObject의value를 찾았을 때 NSNull 대상을 얻었는데 이 대상은 NSString이어야 했다.
  • PHP 서버 친구들과 연락을 통해 우리는 이 문제가 발생한 원인을 최종적으로 발견했다.
  • 원래 서버 학생이 어떤 필드를 가져올 때 실수로 파라미터를 잘못 채워서 얻은 필드가 비어 있었다.그는 이 빈칸을 이 키의 밸류로 JSON에 채웠다.
  • iOS 앱에서 AFNetworking은 이 공백을 발견했다. 이것은 Objective-C의 nil과 현저한 차이가 있다. 왜냐하면 Objective-C의 NSDictionary는 어떤 Key에 대응하는Value가 nil인 것을 허용하지 않기 때문이다.이 공백은 결국 NSNull 객체로 전환됩니다.

  • nil, Nil, NULL, NSNull의 차이점


    nil의 의미
    한 대상을 가리키는 바늘이 비어 있고 대상 바늘에 값을 비워 야생 바늘의 발생을 방지하는 데 사용된다.nil을 빈 객체라고도 합니다. 풀린 객체와 값이 비어 있는 객체(NSNull)가 다르다는 의미입니다.NSNull은 객체입니다. 객체의 값이 비어 있을 뿐입니다. #ifndef nil # ifhas_feature(cxx_nullptr) # define nil nullptr # else # define nil __DARWIN_NULL # endif#endif
    객체 포인터에 값을 공백으로 지정하려면 다음과 같이 하십시오.
    NSString * name = nil;
    NSString * url = nil;
    id object = nil;
    

    닐의 뜻.
    클래스를 가리키는 포인터가 비어 있고 클래스 객체 포인터에 값이 비어 있음 #ifndef Nil # ifhas_feature(cxx_nullptr) # define Nil nullptr # else # define Nil __DARWIN_NULL # endif#endif
    클래스 객체에 대한 값이 비어 있음:
    Class class = Nil;
    

    NULL의 의미
    C 유형의 포인터를 가리키며 C 유형의 포인터에 빈 #if defined( need NULL) #undef NULL #ifdef 값을 지정하는 데 사용됩니다.cplusplus # if !defined(MINGW32) && !defined(_MSC_VER) # define NULL __null # else # define NULL 0 # endif#else # define NULL ((void*)0) #endif
    C 유형 포인터에 값을 지정하려면 다음과 같이 하십시오.
    int * a = NULL;
    char * ch = NULL;
    struct aStruct = NULL;
    

    NSNull의 의미
    NSNull은 하나의 클래스 방법만 가지고 있는 NSObject에서 상속된 클래스입니다.인스턴스 객체는 빈 컨텐트의 객체임을 나타냅니다.주로 수조, 사전에 쓰인다.
    NSMutableArray * mArray = [NSMutableArray array];
    
    [mArray addObject:[NSNull null]];
    
    NSLog(@"%@", [mArray firstObject]); //  :
    
    
    NSMutableDictionary * dict = [NSMutableDictionary dictionary];
    
    [dict setObject:[NSNull null] forKey:@"null"];
    
    NSLog(@"%@", dict[@"null"]); //  :
    

    이를 통해 알 수 있듯이 사용 가능한 NSNull의 실례 대상은 그룹, 사전에서 위치를 차지하고 그 위치는 비어 있다.
    참조:http://www.jianshu.com/p/562ecd82228f

    좋은 웹페이지 즐겨찾기