通过遵循这些最佳实践,你将很大程度上避免许多麻烦,如内存泄漏、循环引用和较大内
存消耗。(你可以将这一部分打印出来,挂在工位上,以便快速查看。)
-
避免大量的单例。具体来说,不要出现上帝对象(如职责特别多或状态信息特别多的对 象)。这是一个反模式,指代一种常见解决方案的设计模式,但很快产生了不良效果。 日志器、埋点服务和任务队列这样的辅助单例都是很不错的,但全局状态对象不可取。
-
对子对象使用 __strong。
-
对父对象使用 __weak。
-
对使引用图闭合的对象(如委托)使用 __weak。
-
对数值属性(NSInteger、SEL、CGFloat 等)而言,使用 assign 限定符。
-
对于块属性,使用 copy 限定符。
-
当声明使用NSError **参数的方法时,需要使用__autoreleasing,并要注意用正确的 语法:NSError * __autoreleasing *。
-
避免在块内直接引用外部的变量。在块外面将它们 weakify,并在块内再将它们 strongify。 参 见 libextobjc 库(https://github.com/jspahrsummers/libextobjc) 来 了 解 @weakify 和 @strongify。
• 进行必要清理时遵循以下准则:
♦ 销毁计时器 ♦ 移除观察者(具体来说,移除对通知的注册)
♦ 解除回调(具体来说,将强引用的委托设置为 nil)
内容摘自Gaurav Vaish的《高性能iOS应用开发中文版》
网友评论