我的控制器中的代码:
CalcBorderBlocks *calcBB = [[CalcBorderBlocks alloc] init];
NSMutableArray *blockArray = [calcBB calc:341241133];
[calcBB release]; // Releases calcBB.
CalcBorderBlocks.h中的代码:
#import <Foundation/Foundation.h>
@interface CalcBorderBlocks : NSObject {
@private
NSMutableArray *blockArray_;
}
@property(nonatomic, retain) NSMutableArray *blockArray;
- (NSMutableArray *)calc:(int)blockID;
@end
CalcBorderBlocks.m中的代码:
#import "CalcBorderBlocks.h"
@implementation CalcBorderBlocks
@synthesize blockArray = blockArray_;
- (id)init {
self = [super init];
if (self) {
blockArray_ = [[NSMutableArray alloc] init]; // Retain count should be 1
}
return self;
}
- (NSMutableArray *)calc:(int)blockID {
// Do stuff
return self.blockArray;
}
- (void)dealloc {
[blockArray_ release]; // Normal cleanup, yet crashes! Works fine if I comment out this line.
[super dealloc];
}
@end
答案 0 :(得分:2)
如果您在此行之后使用blockArray
执行任何操作:
[calcBB release]; // Releases calcBB.
然后就是崩溃的原因。
您发布的calcBB
会在dealloc中释放blockArray
。
我怀疑你需要保留blockArray,根据需要处理它然后在之后释放它。
CalcBorderBlocks *calcBB = [[CalcBorderBlocks alloc] init];
NSMutableArray *blockArray = [[calcBB calc:341241133] retain];
[calcBB release]; // Releases calcBB.
// Process blockArray as needed
[blockArray release];
答案 1 :(得分:1)
此:
CalcBorderBlocks *calcBB = [[CalcBorderBlocks alloc] init];
NSMutableArray *blockArray = [calcBB calc:341241133];
[calcBB release]; // Releases calcBB.
通常意味着保留了blockArray,但也是自动释放的。如果你想让它保持活着,你必须自己保留它,否则它会在一段时间后由自动释放池释放。
答案 2 :(得分:0)
发布崩溃的回溯。更有可能的是,这是因为你过度释放了数组中的某些东西(或者数组本身在其他地方。