我们应该采取哪些步骤 - 最佳实践 - 防止使用@property
和@synthesize
时出现泄漏?使用@property和@synthesize时防止泄漏
0
A
回答
3
请注意你的标准事情,让你回到保留的对象,方法与分配,复制或新的。当您将这些与您的财产一起调用时,您可能会无意中造成泄漏。
在你的界面,你有
@property (nonatomic, retain) NSArray *someArray;
而在你执行你有
@synthesize someArray;
再后来你所使用的财产
self.someArray = [[NSArray alloc] init];
你的对象现在有一个保留从使用self.someArray = 1和从alloc中的一个计数为2。 self.someArray =调用你的setter,它和 - (void)setSomeArray相同:(NSArray)someArray;这是用合成为你创造的。由于您在@property声明中使用了retain关键字,这将包含一个保留。
我倾向于避免这两种方式之一。
要么使用自动释放初始化器
self.someArray = [NSArray array];
或
self.someArray = [[[NSArray alloc] init] autorelease];
,或者使用一个临时变量
NSArray tempArray = [[NSArray alloc] init];
self.someArray = tempArray;
[tempArray release];
所有这些方法你会留下你的self.someArray对象保留数为1,您可以在dealloc中处理。
- (void)dealloc {
[someArray release];
[super dealloc];
}
0
有一件事帮了我很多忙,就是用保留类型检查头文件的属性定义,然后确保在-dealloc方法中有每个版本的发行版。
对于在对象生命周期中对属性的各种赋值,自动合成的设置者应该照顾它。
相关问题
- 1. Objective-C:@property和@synthesize和内存泄漏
- 2. 使用instantiateViewController时防止内存泄漏
- 3. 何时需要@property和@synthesize?
- 4. @property @synthesize
- 5. 使用委托构造,防止泄漏
- 6. iPhone开发 - 防止泄漏
- 7. 关于产品@property和@synthesize
- 8. @property setter中的泄漏
- 9. 使用@property和@synthesize时得到不正确的值
- 10. 什么时候你必须在iPhone SDK中使用@property和@synthesize?
- 11. 如何防止内存泄漏
- 12. 如何防止这些内存泄漏?
- 13. 防止我的内存泄漏
- 14. @property和@synthesize和内存错误
- 15. 这是否使用C指针可以防止泄漏内存?
- 16. 如何防止JobService使用的AsyncTask中的上下文泄漏
- 17. @property和@synthesize:为什么这两个?
- 18. @property和@synthesize有什么意义?
- 19. @property和@synthesize有什么区别?
- 20. @property @synthesize @dynamic差异在Xcode
- 21. HIkariCP:连接泄漏和使用时间
- 22. 使用Task.Factory.FromAsync时泄漏
- 23. 使用autorelease时泄漏?
- 24. Objective-C中使用的@property和@synthesize是什么?
- 25. 如何防止使用CorePlot使用的字典在阵列上发生泄漏
- 26. 导航控制器泄漏时泄漏
- 27. 如何使用Struts防止XSS漏洞
- 28. 停止泄漏的文本
- 29. 关于@synthesize [property name]语法的问题
- 30. Objective-C:@property声明没有实现(@synthesize)