Objective-c 에서 nil,Nil,NULL 과 NSNull 의 차이
nil: A null pointer to an Objective-C object. ( #define nil ((id)0) ) Nil: A null pointer to an Objective-C class. NULL: A null pointer to anything else, is for C-style memory pointers. ( #define NULL ((void *)0) )
NSNull: A class defines a singleton object used to represent null values in collection objects (which don't allow nil values). [NSNull null]: The singleton instance of NSNull.
Technically they're all the same,,, but in practice they give someone reading your code some hints about what's going on; just like naming classes with a capital letter and instances with lowercase is recommended, but not required. If someone sees you passing NULL, they know the receiver expects a C pointer. If they see nil, they know the receiver is expecting an object. If they see Nil, they know the receiver is expecting a class. Readability.
if obj is nil , [obj message] will return NO, without NSException if obj is NSNull , [obj message will throw a NSException
Demo1:
[NSApp beginSheet:sheet
modalForWindow:mainWindow
modalDelegate:nil //pointing to an object
didEndSelector:NULL //pointing to a non object/class
contextInfo:NULL]; //pointing to a non object/class
Demo2:
NSObject *obj1;
if (obj1 != nil) {
NSLog(@"object is not nil");
}else
{
NSLog(@"object is nil");
}
testClass *c1;
if (c1 != Nil) {
NSLog(@"class is not Nil");
}else
{
NSLog(@"class is Nil");
}
int *money;
if (money != NULL) {
NSLog(@"money is not NULL");
}else
{
NSLog(@"money is NULL");
}
Demo3:
NSObject *obj1 = [[NSObject alloc] init];
NSObject *obj2 = [NSNull null];
NSObject *obj3 = [NSObject new];
NSObject *obj4;
NSArray *arr1 = [NSArray arrayWithObjects:obj1, obj2, obj3, obj4, nil];
NSLog(@"arr1 count: %ld", [arr1 count]); //arr1 count: 3
NSObject *obj1;
NSObject *obj2 = [[NSObject alloc] init];
NSObject *obj3 = [NSNull null];
NSObject *obj4 = [NSObject new];
NSArray *arr2 = [NSArray arrayWithObjects:obj1, obj2, obj3, obj4, nil];
NSLog(@"arr2 count: %ld", [arr2 count]); //arr2 count: 0
Demo4:
// !
NSObject *obj1 = [NSNull null];
NSArray *arr1 = [NSArray arrayWithObjects:@"One", @"TWO", obj1, @"three" ,nil];
for (NSString *str in arr1) {
NSLog(@"array object: %@", [str lowercaseString]);
}
//
NSObject *obj1 = [NSNull null];
NSArray *arr1 = [NSArray arrayWithObjects:@"One", @"TWO", obj1, @"three" ,nil];
for (NSString *str in arr1) {
if (![str isEqual:[NSNull null]]){
NSLog(@"array object: %@", [str lowercaseString]);
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.