2011-08-12 6 views
1

コードを保持:CalcBorderBlocks.hでなぜクラッシュするのですか? DEALLOC /解除+プロパティ/私のコントローラにすごみ

CalcBorderBlocks *calcBB = [[CalcBorderBlocks alloc] init]; 
NSMutableArray *blockArray = [calcBB calc:341241133]; 
[calcBB release]; // Releases calcBB. 

コード:CalcBorderBlocks.mで

#import <Foundation/Foundation.h> 

@interface CalcBorderBlocks : NSObject { 
@private 
    NSMutableArray *blockArray_; 
} 
@property(nonatomic, retain) NSMutableArray *blockArray; 

- (NSMutableArray *)calc:(int)blockID; 

@end 

コード:

#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

+1

私はタイトルが大好き...なぜ私はクラッシュするのですか? :) –

答えて

2

あなたは、この行の後blockArrayで何かをやっている場合:。

[calcBB release]; // Releases calcBB. 

次にそれが原因ですクラッシュ。

あなたは順番にのdeallocでblockArrayリリースcalcBBをリリースしている。

私は必要に応じて、それがその後、後方にそれを解放するあなたは、プロセスをblockArrayを保持する必要がある疑いがありますエラート。

CalcBorderBlocks *calcBB = [[CalcBorderBlocks alloc] init]; 
NSMutableArray *blockArray = [[calcBB calc:341241133] retain]; 
[calcBB release]; // Releases calcBB. 

// Process blockArray as needed 

[blockArray release]; 
0

クラッシュのバックトレースを送信します。あなたはどこか別の配列(または配列自体に何かをoverreleasedためではない可能性が高い、それは

1

これは:

CalcBorderBlocks *calcBB = [[CalcBorderBlocks alloc] init]; 
    NSMutableArray *blockArray = [calcBB calc:341241133]; 
    [calcBB release]; // Releases calcBB. 

通常blockArrayは保持だけでなく、自動解放されることを意味します。それを生かし続けるには、それを自分で保持する必要があります。そうしないと、しばらくすると自動解放プールによって解放されます。

関連する問題