ios nil 和null 的区别

如题所述

nil用给象赋值(Objective-C任何象都属于id类型)NULL则给任何指针赋值NULLnil能互换nil用于类指针赋值(Objective-C类象类meta-class实例) NSNull则用于集合操作虽表示都空值使用场合完全同
示例:
id object = nil;
// 判断象空
if (object) {
}

// 判断象空
if (object == nil) {
}

// 数组初始化空值结束
NSArray *array = [[NSArray alloc] initWithObjects:@"First", @"Second", nil];

// 判断数组元素否空
NSString *element = [array objectAtIndex:2];
if ((NSNull *)element == [NSNull null]) {
}
今做项目候遇要判断数组元素否空我写都效
if(!element)
if([element length]>0)
if(element== NULL)
if(element == Nil)

// 判断字典象元素否空
NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys:
@"iPhone", @"First", @"iPad", @"Second", nil];
NSString *value = [dictionary objectForKey:@"First"];
if ((NSNull *)value == [NSNull null]) {
}
欢迎家继续补充区别

加深理解

1、nil:般赋值给空象;
2、NULL:般赋值给nil外其空值SEL等;
  举栗(重啊~):
    [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
3、NSNULL:NSNull:+ (NSNull *) null;
  [NSNull null]用NSArrayNSDictionary加入非nil(表示列表结束)空值. [NSNull null]象用能使用nil场合

4、向nil发送消息返NO异程序继续执行;
  向NSNull象发送消息收异

NSArrayNSDictionarynil特殊含义(表示列表结束)所能集合放入nil值要确实需要存储表示都没值使用NSNull类NSNull:
+ (NSNull *) null;

nil象指针空Nil类指针空NULL基本数据类型空些理解nilNil NULL区别吧

加深理解二

浅谈关于nil null区别及相关问题

1、nilnull字面意思理解比较简单nil象NULL值我理解nil象设置空null基本类型设置空觉点像属性基本类型配assign NSString类型般配copy象般用retain且我于nil调用产crash或者抛异
看段
nil -> Null-pointer to objective- c object
NIL -> Null-pointer to objective- c class
null-> null pointer to primitive type or absence of data.
看用
NSURL *url = nil;
Class class = Nil;
int *pointerInt = NULL;
nil象指针空Nil类指针空NULL基本数据类型空些理解nilNil NULL区别吧
2、研究问题
dealloc
-(void) dealloc
{
self.test = nil;
[_test release];
test = nil;
}
几区别
先说简单 [_test release]; 引用技术减1所谓引用计数看看指针指向块内存实体release指针减少release0候真块内存归给系统候

再说self.test = nil;说明 属性settergetter难理解

-(void) setTest:(NSString *)newString
{
if(_test != newString)
[_test release];
_test = [newString retain];
}
-(NSString *)test
{
return _test;
}
settergetter问题相于刚才代码改变
if(_test != nil)
[_test release];
_test = nil;
现比较容易解释setterretain nil象前已经先release旧象优点员变量连指向随机数据机都没通别式能现指向随机数据情况release万别要用要存取已经dealloc能crash指向nil发错误nil说白计数器0说吧真release象候NSLog打印指向内存控件nil候打印指向内存空间
现难解释test = nil; 单纯种用说自给自制造内存泄露理解相于指向象指针直接象刀两断直接让test指向nil内存实体消失系统收
温馨提示:答案为网友推荐,仅供参考
相似回答