iOS开发 == 和 equal的区别和联系

对于普通的数据类型,只要值相等==就会返回true,对于两个指针类型的变量,他们必须指向同一个指针变量,也就是他们指向的地址必须相等。

equal和使用==来判断两个对象是否相等没有区别。

但是有时候我们比较字符串的时候只要值相等就可以返回true,那是因为重写了equal方法。

对于这个方法,我们可以自己定义他们相等的条件,所有的类都继承自NSObject类,我们都可以重写这个方法。

对于字符串比较,字符串还定义了一个isEqualToString的方法,专门用来判断字符串序列等不等

有一个问题最有意思 使用@“我是谁啊”和StringWithFormat:@“我是谁啊”。这两个有什么区别呢

区别如下:

@“我是谁啊”使用的是常量池,常量池保证了字符串直接量只有一个,不会有多个副本。

NSString * s1 = @"我是谁啊";

NSString * s2 = @"我是谁啊";

打印一下s1和s2的地址值,可以发现是完全相同的

使用 StringWithFormat:@“我是谁啊”,这是运行时创建出来的,被保存在运行时内存区内(堆内存),不会放入常量池中,因此地址和s1 s2 是不同的。

时间: 2024-10-08 00:47:35

iOS开发 == 和 equal的区别和联系的相关文章

iOS开发-NSOperation与GCD区别

Mac OS X 10.6及iOS4.0之后导入了可以使全体线程更高效运行,并且使并行处理应用更易开发的架构,GCD(Grand Central  Dispatch),同时引入的还有Run Loop,线程(包括Cocoa和POSIX)和Operation.GCD拥有非常轻量级的工作单元和并发方式,并且由系统决定其最佳调度方式.这个时候出现了一个问题,NSOperation如何处理呢? 其实我们在通过NSOperation和GCD进行开发过程中,会发现两者执行的方式有许多相似之处,NSOperat

iOS 开发----imageNamed和imageWithContentsOfFile区别

在 Apple 官方帮助文档提供了两个加载图片的方法 imageNamed , 其参数为图片的名字 imageWithContentsOfFile , 其参数是图片文件的路径 下面主要是说一下他们的区别: imageNamed: 用这个方法加载图片分为两种情况: 系统缓存有这个图片 直接从缓存中取得 系统缓存没有这个图片 通过传入的文件名对整个工程进行遍历 , 如果如果找到对应的图片 , iOS 系统首先要做的是将这个图片放到系统         缓存中去,以备下次使用的时候直接从系统缓存中取

iOS 开发 atomic 与 nonatomic 区别

atomic :  变量默认是有该有属性的,这个属性是为了保证在多线程的情况下,编译器会自动生成一些互斥加锁的代码,避免该变量的读写不同步的问题. nonatomic  : 如果该对象无需考虑多线程的情况,这个属性会让编译器少生成一些互斥代码,可以提高效率. atomic 的意思是setter/getter 这个函数,是一个原语操作,如果有多个线程同时调用setter的话,不会出现某一个线程执行完setter全部语句之前,另一个线程开始执行setter情况,相当于函数头尾加了锁一样,可以保证数据

ios开发get post的区别

1.Get是用来从服务器上获得数据,而Post是用来向服务器上传递数据. 2.Get将表单中数据的按照variable=value的形 式,添加到action所指向的URL后面,并且两者使用“?”连接,而各个变量之间使用“&”连接:Post是将表单中的数据放在form的数 据体中,按照变量和值相对应的方式,传递到action所指向URL. 3.Get是不安全的,因为在传输过程,数据被放在请求的URL中,而如 今现有的很多服务器.代理服务器或者用户代理都会将请求URL记录到日志文件中,然后放在某个

细说ios开发和Android开发有什么区别?谁更有优势?

ios开发和安卓开发的市场分析:      首先iOS系统是应用在iPhone.iPad等高端设备上的,iOS市场占有的份额虽然不高,但是用户的消费能力比较强,生态圈较好有利于开发者直接获利.Android向大众人群普及,市场份额占有率虽然很高,但是用户群体的人均消费能力普遍弱,但是依托于用户的基数使得Android有资本跟iOS抢占市场份额. ios开发与安卓开发区别比较:      iOS:基于Unix闭源的操作系统,核心语言是Objective-C,相关的语言还有C语言(重点在数据结构和算

ios 开发中 动态库 与静态库的区别

使用静态库的好处 1,模块化,分工合作 2,避免少量改动经常导致大量的重复编译连接 3,也可以重用,注意不是共享使用 动态库使用有如下好处: 1使用动态库,可以将最终可执行文件体积缩小 2使用动态库,多个应用程序共享内存中得同一份库文件,节省资源 3使用动态库,可以不重新编译连接可执行程序的前提下,更新动态库文件达到更新应用程序的目的. 从1可以得出,将整个应用程序分模块,团队合作,进行分工,影响比较小. 等其他好处, 从2可以看出,其实动态库应该叫共享库,那么从这个意义上来说,苹果禁止iOS开

IOS问题汇总:2015-1-9 【iOS开发】.h,.m,.mm,.cpp等区别

[iOS开发].h,.m,.mm,.cpp等区别 文件区别: .h :头文件.头文件包含类,类型,函数和常数的声明. .m :源代码文件.这是典型的源代码文件扩展名,可以包含Objective-C和C代码. .mm :源代码文件.带有这种扩展名的源代码文件,除了可以包含Objective-C和C代码以外还可以包含C++代码.仅在你的Objective-C代码中确实需要使用C++类或者特性的时候才用这种扩展名 .cpp:只能编译C++ 当你需要在源代码中包含头文件的时候,你可以使用标准的#incl

[BS-17] iOS开发-Alpha,Hidden和Opaque区别

iOS开发-Alpha,Hidden和Opaque区别 UIView控件都有Alpha,Hidden和Opaque这三个常见属性,UIView控件BackgroundColor是用RGBA表示的,故背景色也会有一个alpha(在Storyboard中调色板显示为opacity).这些属性使用时易混淆,尤其是Alpha和Opaque之间有的时候不是很好分别,稍微整理下: Alpha(不透明度) alpha是不透明度,属性为浮点类型的值,取值范围从0到1.0,表示从完全透明到完全不透明,其特性有当前

IOS开发 arc与非Arc代码的区别

是属于ios开发中的内存管理问题:在这我简要概述一下,详细讲的话内容挺多,而且是作为一个ios开发人员,或ios开发爱好者,这是必须了解的:Objective-c中提供了两种内存管理机制MRC(MannulReference Counting)和ARC(Automatic Reference Counting),分别提供对内存的手动和自动管理,来满足不同的需求.其实arc 内部机制原理也是来源于mrc ,arc 是在 iOS 5/ Mac OS X 10.7 开始导入,利用 Xcode4.2 可