首页 / 知识
Objective-C中点表示法与方法调用之间的性能差异
2023-04-13 15:17:00

Performance difference between dot notation versus method call in Objective-C您可以在Objective-C中使用标准的点符号或方法调用来访问Objective-C中的对象的属性。
要么
性能(在访问属性方面)是否有所不同? 就编码风格而言,这只是偏好问题吗? 与括号表示法一样,Objective-C中用于属性访问的点表示法是消息发送。也就是说,鉴于此:
最后两行将完全相同地编译。唯一改变此属性的是属性是否指定了
最后两行的编译相同。 唯一会看到性能差异的地方是您没有将属性标记为"非原子"。然后@synthesize将自动在属性的设置周围添加同步代码,以确保其线程安全-但设置和访问速度较慢。 因此,大多数情况下,您可能想定义一个属性,例如: @属性(非原子的,保留)NSString * myProp; 就您个人而言,从不必考虑编写正确的setter方法的角度来看,我发现点符号通常很有用,即使对于非原子的setter来说,这也不是完全不重要的,因为您还必须记得正确释放旧值。使用模板代码会有所帮助,但是您总是会出错,而且通常是重复的代码使类混乱。 要注意的一种模式:如果您自己定义设置器(而不是让@synthesize创建它)并开始具有设置值的其他副作用,则可能应该使设置器成为常规方法,而不是使用属性表示法进行调用。 语义上使用属性似乎是直接向调用者访问实际值,因此与该值不同的任何事情都应该通过发送消息而不是访问属性来完成(即使它们实际上都在发送消息)。 查看可可的文章是我的女朋友。其要点是,使用一个在另一个上不会造成性能损失。 但是,这种符号的确使查看变量发生了什么以及变量是什么变得更加困难。 还请阅读有关可可与爱的博客文章: http://cocoawithlove.com/2008/06/speed-test-nsmanagedobject-objc-20.html 在那里,作者比较了NSManagedObject的自定义访问器和点表示法的速度,发现没有区别。但是,KVC访问(setValue:forKey :)的速度似乎是速度的两倍。 据我所知,两者之间没有明显的性能差异。我可以肯定地说,在大多数情况下,它将被"编译"为相同的代码。 如果不确定,请尝试编写一个测试应用程序,每种方法执行一百万次左右,同时计时所需的时间。这是唯一可以确定的方法(尽管它可能在不同的体系结构上有所不同。) |
最新内容
相关内容
提升Python程序性能的好习惯
提升Python程序性能的好习惯,代码,名字,检测,数据,培训,模块,函数,变量,性能,对象,掌握一些技巧,可尽量提高Python程序性能,也可以避免不必要的Python类和对象
Python类和对象,代码,培训,对象,实例,定义,关键字,函数,问题,顶层,全名,刚接触python中的类和对象,我也和大多数小伙伴一样迷茫,不知道它和我所Python中JSON 对象有哪些特点?
Python中JSON 对象有哪些特点?,名称,信息,代码,培训,数据,观察,对象,嵌套,数组,特点,JSON对象的结构是什么样子呢?上面代码中的obj就是一个JSPython中的对象
Python中的对象,数据,连续,代码,培训,概念,对象,内存,类型,初始化,静态,Python中一切皆是对象。————GuidovanRossum(1989)这句话只要你学Python 性能剖分工具
Python 性能剖分工具,时间,工具,环境,分析,数据,代码,标准,人员,项目,培训,眼看着项目即将完成,却被测试人员告知没有通过性能测试,这种情况在Python查看模块中的属性
Python查看模块中的属性,名称,标准,环境,培训,属性,模块,对象,函数,定义,变量,内置函数dir可用于列出某模块中定义了哪些属性(全局名称空间)列举Python面向对象中带双下划线的
列举Python面向对象中带双下划线的特殊方法,信息,代码,培训,对象,属性,方法,实例,字符串,里边,内容,__new__:生成实例__init__:生成实例的属性_Python面向对象的基本概念
Python面向对象的基本概念,概念,信息,位置,新增,培训,属性,鸟类,定义,对象,方法,python使用类(class)和对象(object),进行面向对象(object-oriPython之面向对象的进一步拓展
Python之面向对象的进一步拓展,信息,对象,操纵,培训,名字,方法,性质,参数,属性,定义,我们熟悉了对象和类的基本概念。我们将进一步拓展,以便能Python性能分析
Python性能分析,代码,分析,对比,时间,工具,标准,注释,跨行,通用,报告,python标准库提供两个代码性能分析相关的模块,即timeit和cProfile/profiPython 条件对象
Python 条件对象,状态,培训,对象,条件,线程,方法,底层,发生,场景,典型,条件对象总是与某种类型的锁对象相关联,锁对象可以通过传入获得,或者在Python 事件对象
Python 事件对象,通信,培训,线程,事件,对象,内部,标志,信号,机制,以上,一个线程发出事件信号,其他线程等待该信号,这是最简单的线程之间通信机