We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
对象的调整也经常是消耗 CPU 资源的地方。这里特别说一下 CALayer:CALayer 内部并没有属性,当调用属性方法时,它内部是通过运行时 resolveInstanceMethod 为对象临时添加一个方法,并把对应属性值保存到内部的一个 Dictionary 里,同时还会通知 delegate、创建动画等等,非常消耗资源。UIView 的关于显示相关的属性(比如 frame/bounds/transform)等实际上都是 CALayer 属性映射来的,所以对 UIView 的这些属性进行调整时,消耗的资源要远大于一般的属性。对此你在应用中,应该尽量减少不必要的属性修改。
其中提到的CAlayer内部没有属性,你是怎么知道的?如何做的测试. 我尝试了交换 resolveInstanceMethod这个类方法,去调查给CALayer赋值一个属性,会不会走我交换的函数.结果是没有进入我的交换函数.
请指教.
The text was updated successfully, but these errors were encountered:
1.可以试试这样的代码:
@interface CALayer (MyTest) @property NSString myName; @end @implementation CALayer (MyTest) @end
一般的类直接访问这种在 Category 里声明的属性,会崩溃,而 CALayer 会在内部动态生成。
2.你可以多次访问和设置 CALayer 的同一个属性(比如 for 循环 100000 次修改 frame 属性),然后在 Instuments 里查看 CPU 占用的调用,能看到内部的一些函数调用是动态生成属性,并设置到 Dictionary 中。
3.可以看看 CALayer Dump 出来的头文件:https://github.com/nst/iOS-Runtime-Headers/blob/master/Frameworks/QuartzCore.framework/CALayer.h
Sorry, something went wrong.
No branches or pull requests
其中提到的CAlayer内部没有属性,你是怎么知道的?如何做的测试. 我尝试了交换 resolveInstanceMethod这个类方法,去调查给CALayer赋值一个属性,会不会走我交换的函数.结果是没有进入我的交换函数.
请指教.
The text was updated successfully, but these errors were encountered: