我有一个名为播放列表的NSMutableArray。这是一个名为getAllPlaylists的方法。代码是这样的:
-(NSMutableArray *)getAllPlaylists
{
//playlist is an instance variable
playlist = [[NSMutableArray alloc] init]; //memory leak here
...
//some code here which populates the playlist array
[playlist addObject: object1];
...
return playlist;
}
播放列表的数组分配步骤导致内存泄漏。在这种情况下我可以发布这个阵列吗?或者我可以通过做其他事情来避免在这里分配n初始化播放列表吗?任何帮助将不胜感激!!
答案 0 :(得分:1)
2个解决方案:
使用autorelease
:
- (NSMutableArray*)getAllPlaylists
{
playlist = [[NSMutableArray alloc] init];
...
return [playlist autorelease];
}
或代替使用[[NSMutableArray alloc] init]
创建NSMutableArray对象,使用[NSMutableArray array]
等同于[[[NSMutableArray alloc] init] autorelease]
:
- (NSMutableArray*)getAllPlaylists
{
playlist = [NSMutableArray array];
...
return playlist;
}
答案 1 :(得分:1)
您应该自动释放要返回的新对象,这些对象不属于对象(局部变量,而不是实例变量)。
playlist = [[[NSMutableArray alloc] init] autorelease];
或者,您可以使用便捷方法更轻松地完成此操作:
playlist = [NSMutableArray array];
对于对象拥有的项(实例变量),您应该确保先释放旧值并实现一个dealloc
方法,该方法也会释放该值。
- (NSMutableArray*)getAllPlaylists {
[playlist release];
playlist = [[NSMutableArray alloc] init];
return playlist;
}
- (void)dealloc {
[playlist release];
[super dealloc];
}
有关详细信息,请参阅memory management guide。