我们应该采取哪些步骤 - 最佳实践 - 防止使用@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. IOS @property,@synthesize内存泄漏
- 2. Objective-C:@property和@synthesize和内存泄漏
- 3. 使用instantiateViewController时防止内存泄漏
- 4. @property和@synthesize
- 5. 何时需要@property和@synthesize?
- 6. 关于@property和@synthesize
- 7. @property @synthesize
- 8. 使用委托构造,防止泄漏
- 9. 使用cfimage和cfxml时防止内存泄漏?
- 10. iPhone开发 - 防止泄漏
- 11. 防止泄漏过程
- 12. 使用@property和@synthesize的任何错误
- 13. 关于产品@property和@synthesize
- 14. @property setter中的泄漏
- 15. 使用@property和@synthesize时得到不正确的值
- 16. 什么时候你必须在iPhone SDK中使用@property和@synthesize?
- 17. 如何防止这些内存泄漏?
- 18. ProgressDialog:如何防止泄漏窗口
- 19. 如何防止泄漏抽象?
- 20. 防止我的内存泄漏
- 21. 如何防止石英内存泄漏
- 22. 如何防止内存泄漏
- 23. @property和@synthesize和内存错误
- 24. 这是否使用C指针可以防止泄漏内存?
- 25. 如何防止JobService使用的AsyncTask中的上下文泄漏
- 26. @property和@synthesize有什么意义?
- 27. @property和@synthesize的工作方式如何?
- 28. @property和@synthesize有什么区别?
- 29. @property和@synthesize:为什么这两个?
- 30. @property @synthesize @dynamic差异在Xcode