iOS中的内存管理-I can';我不知道如何释放内存
我使用的是iOS 4,我有一些内存管理问题,我不明白。我将尝试简化代码:iOS中的内存管理-I can';我不知道如何释放内存,ios,memory-management,ios4,Ios,Memory Management,Ios4,我使用的是iOS 4,我有一些内存管理问题,我不明白。我将尝试简化代码: - (void)viewDidLoad { NSMutableArray *buttonArray = [[NSMutableArray alloc] init]; for (int i = 0; i < [othercollection count]; i++) { // Push objects to button array } self.buttonS
- (void)viewDidLoad
{
NSMutableArray *buttonArray = [[NSMutableArray alloc] init];
for (int i = 0; i < [othercollection count]; i++)
{
// Push objects to button array
}
self.buttonSliderView = [[ButtonSliderView alloc] initWithButtons:
buttonArray];
[buttonArray release];
[self.view addSubview:self.buttonSliderView];
[buttonSliderView release];
}
- (void) viewDidAppear
{
if ([buttonSliderView.menuButtons count] > 0)
{
// ...
}
}
我在查看显示的第一行有一个错误<代码>菜单按钮已发布。我怎样才能解决这个问题?哪个是正确的解决方案
如果我将按钮数组声明更改为:
NSMutableArray* buttonArray = [[[NSMutableArray alloc] init] autorelease];
…并删除
release
语句,它也会崩溃。如果我删除了release
语句,但没有autorelease
,它会工作,但内存会泄漏。按钮滑动视图
可能仍在使用该对象(而不是抓取内容并释放它)。不要仅仅因为这个原因就认为这是内存泄漏。问题在于忽略setter并直接分配menuButtons属性。试试这个:
-(id) initWithButtons:(NSMutableArray*)buttonArray {
self = [super init];
if (self) {
[self setMenuButtons:buttonArray];
}
}
您没有说明如何声明menuButtons属性,但我假设它是:
@property (nonatomic, retain) NSArray* menuButtons;
无论何时使用setter设置菜单按钮,它都会自动为您保留菜单按钮。如果您的财产声明如下:
@property (nonatomic, assign) NSArray* menuButtons;
然后需要手动保留阵列:
-(id) initWithButtons:(NSMutableArray*)buttonArray {
self = [super init];
if (self) {
menuButtons = [buttonArray retain];
}
}
但是我分配了它。我应该释放这个物体吗?我用了设定器,一切都正常了。为什么self.menubuttons与[self setMenuButtons…]不一样?它是一样的,但在代码中您直接分配了ivar,如下所示:
menubuttons=buttonArray;
-(id) initWithButtons:(NSMutableArray*)buttonArray {
self = [super init];
if (self) {
menuButtons = [buttonArray retain];
}
}