【发布时间】:2011-05-02 22:28:08
【问题描述】:
我不确定我是否正确编写了这段代码。
Fruit * o1 = [[Fruit alloc] initWithName:kFruitOrange imageView:orange1] ;
fruitArray = [[NSMutableArray arrayWithObjects:o1, nil] retain]; // retain array for later use.
实际上有几种水果。由于我分配了它们,因此将它们分配给我的类 init 方法中的一个数组。我应该何时以及如何释放这些对象。
澄清。
如果我释放
[o1 release] 保存到数组后,用其他方法查看数组时出现“exc_bad_access”错误。
在我的 viewDidUnload 方法中,我已经遍历了数组并手动释放了每个对象。
for (Fruit * f in fruitArray) {
[f release];
}
我以前从未见过其他人在代码中这样做过,所以我认为这不是正确的做法吗?
更新
-(Fruit *) initWithName:(enum fruitTypes)fruitName imageView:(UIImageView *)iv{
if((self = [super init])){
name = @"Fuit Object";
NSLog(@"creating orange colour %i", fruitName);
switch (fruitName) {
case kFruitOrange:
NSLog(@"creating orange colour ");
colour = [UIColor orangeColor] ;
break;
case kFruitBanana:
colour = [UIColor yellowColor];
break;
case kFruitKiwi:
colour = [UIColor greenColor];
break;
case kFruitBlue:
colour = [UIColor blueColor];
break;
default:
NSLog(@"COLOUR NOT FOUND");
break;
}
value = fruitName;
imageView = iv;
center = iv.center;
[colour retain];
[imageView retain];
[name retain];
return self;
}
return nil;
}
** 答案是我需要保留我在 FRUIT.M 类中设置的变量。
【问题讨论】:
-
将
for()循环从您的viewDidUnload方法中取出。这样管理你的记忆是绝对错误的。 -
粘贴
-[Fruit initWithName:imageView:]的代码。 -
它看起来在我的代码中的其他地方; (感谢弗拉基米尔,正确答案如下。
标签: objective-c memory-management