Objective-C中关于isEqual与“==”的区别解析
2016-03-08 11:33
405 查看
大家都知道equal和==有区别,但是很难去讲出来,这里我通过简单的例子讲一下,如有错误,请大婶们指教,感谢!
// ============================== // 这样str1和str2存放在常量区中,指向的是同一个地址 NSString * str1 = @"123"; NSString * str2 = @"123"; NSLog(@"%p,%p,equal:%d,==:%d",str1,str2,[str1 isEqual:str2],str1 == str2); // 0x107eb7068,0x107eb7068,equal:1,==:1 // ============================== // str3指向常量区,str4指向的是变量字符串区域,指向的是不同地址 NSString * str3 = @"123"; NSString * str4 = [NSString stringWithFormat:@"123"]; NSLog(@"%p,%p,equal:%d,==:%d",str3,str4,[str3 isEqual:str4],str3 == str4); NSLog(@"StringEqual:%d",[str3 isEqualToString:str4]); // 0x107eb7068,0xa000000003332313,equal:1,==:0 // StringEqual:1 // ============================== // 字符串的内存空间分配与其他Object对象的分配方式有所不同,相同内容的字符串的哈希值相同,所以即使用了alloc来开辟内存,结果指向的内存还是同一块内存,并且都存放在变量区,两个对象的isEqual结果是true。 NSString * str5 = [[NSString alloc]initWithFormat:@"123"]; NSString * str6 = [[NSString alloc]initWithFormat:@"123"]; NSLog(@"%p,%p,equal:%d,==:%d",str5,str6,[str5 isEqual:str6],str5 == str6); NSLog(@"StringEqual:%d",[str5 isEqualToString:str6]); // 0xa000000003332313,0xa000000343332314,equal:0,==:0 // StringEqual:1 // ============================== // 对于一般的Object对象来说,alloc开辟出来的空间是不同的,在没有复写isEqual方法的前提下,两个对象的hash值和内存地址都是不同的,所以isEqual会返回false。(注意,复写了isEqual方法的话另说!) CJHObject * obj1 = [[CJHObject alloc]init]; CJHObject * obj2 = [[CJHObject alloc]init]; NSLog(@"%p,%p,equal:%d,==:%d",obj1,obj2,[obj1 isEqual:obj2],obj1 == obj2); // 0x7fae03f25d90,0x7fae03f0a1a0,equal:0,==:0
相关文章推荐
- Objective-C的AutoreleasePool与Runloop的关联
- The object or library file 'xxx.obj' was created with an older compiler than other obj
- Object-C 类,对象,运行时,isa
- JAVA Object类的方法
- 《DLL for Win32/MFC》Part 1, The Win32 DLL Object
- 谈谈Objective-C的警告
- Objective-C常用的宏定义
- rcnn学习笔记:Rich feature hierarchies for accurate object detection and semantic segmentation
- NSNumber各类型包装转换
- 单例在ObjectiveC中的正确打开方式
- Object-C高级编程读书笔记(1)——Block的基本概念
- Objective-C与Swift中通过字符串获取类的方法对比与实现
- iOS开发实用技巧—Objective-C中的各种遍历(迭代)方式
- 使用C、C++、Objective-C三语言混编时的注意事项
- The content of element type "configuration" must match "(properties?,settings?,typeAliases?,typeHandlers?,objectFactory?...
- Runtime of Objective-C
- Objective-C Runtime 一小时入门教程(下)
- Objective-C Runtime 一小时入门教程(中)
- Objective-C Runtime 一小时入门教程(上)
- objective-c 等待多个异步函数完成后,再执行某段代码--GCD Group 的使用