我有類似的東西。這是內存泄漏嗎?
initMyclass {
if (self= [super init]) {
classMember = [[NSMutableArray alloc] init];
}
return self;
}
儀器在那裏報告泄漏。
我在那裏泄漏內存? 如果不是,xcode報告錯誤的內存泄漏?
謝謝。
我有類似的東西。這是內存泄漏嗎?
initMyclass {
if (self= [super init]) {
classMember = [[NSMutableArray alloc] init];
}
return self;
}
儀器在那裏報告泄漏。
我在那裏泄漏內存? 如果不是,xcode報告錯誤的內存泄漏?
謝謝。
儀器正在報告泄漏,因爲您沒有在其他地方釋放對象。你需要有[classMember release]
在類的dealloc
方法:
- (void) dealloc {
[classMember release];
[super dealloc];
}
它是一個類或實例會員?告訴我們這個課程的@interface
。
另外,initMyClass
..或其他..不是一個適當的init方法。它的簽名應該是這樣的形式:
- (id) init {
if ((self = [super init]) != nil) {
someInstanceVariable = [NSMutableArray new];
}
return self;
}
當你在這裏問一個問題時更具體。
@interface myClass:NSObject NSMutableArray * classMember; } –
代碼非常短而簡單,它怎麼能更具體?!我試圖理解爲什麼儀器認爲它是內存泄漏,當它不是。 –
@St3fan除了在方法選擇器之前缺少' - (id)'之外,他的init方法非常好。 –
這就是爲什麼你應該使用屬性或顯式訪問器。
如果你有這樣的:
@interface myObject : NSObject
{
NSMutableArray *classMembers;
}
@property(nonatomic, retain) NSMutableArray *classMembers;
@end
@implementation myObject
@synthesize classMembers;
-(id) init{
if (self=[super init]) {
self.classMembers=[[NSMutableArray alloc] initWithCapacity:1];
}
return self;
}//-------------------------------------(id) init------------------------------------
-(void) dealloc{
[classMembers release];
[super dealloc];
}//-------------------------------------(void) dealloc------------------------------------
@end
你不會(也不應該永遠)都錯過身邊與屬性的保留。這消除了所有泄漏和特性的過度釋放。
如果屬性的對象發生泄漏,那麼您會自動知道它將被保留在另一個對象中,而不是包含該屬性的類的實例。
這段代碼實際上會泄漏。 initWithCapacity:返回一個保留的對象,然後在設置屬性時再次保留該對象。你應該在創建數組時添加autorelease,或者使用[NSMutableArray arrayWithCapacity:1],它將返回一個自動釋放對象。 – Felixyz
爲什麼這個問題被低估? –