2010-06-10 63 views
1

这里是我的自定义类:的OBJ-C:调用release/dealloc中导致EXC_BAD_ACCESS

PolygonShape : NSObject { 
int numberOfSides; 
int minimumNumberOfSides; 
int maximumNumberOfSides; 
} 

我的自定义init方法:

- (id)initWithNumberOfSides:(int)sides minimumNumberOfSides:(int)min maximumNumberOfSides:(int)max { 
if (self = [super init]) { 
    [self setMinimumNumberOfSides:min]; 
    [self setMaximumNumberOfSides:max]; 
    [self setNumberOfSides:sides]; 
} 

return self; 
} 

我的dealloc方法:

- (void) dealloc { 
NSLog("Calling dealloc"); 
[super dealloc]; 
} 

我示例代码崩溃:

PolygonShape *shape1 = [[PolygonShape alloc] initWithNumberOfSides:6 minimumNumberOfSides:5 maximumNumberOfSides:9]; 
[shape1 release]; 

我已经分配了一个PolygonShape增加保留计数1,然后释放ing应该递减到0并调用dealloc,将该消息打印到NSLog,但我只是得到EXC_BAD_ACESS。我可以在创建对象后访问和更改对象中的字段,以便一切工作都可以完成。非常感谢您的帮助!

+0

你有适当的autorelease池吗? (我目前唯一的想法!) – ShinTakezou 2010-06-10 21:25:08

+0

不要忘记检查dreamlax的发布作为正确的答案。 – 2010-06-10 21:26:23

回答

6
NSLog("Calling dealloc"); 

您正在传递一个常规C字符串,而不是NSString。你需要这样做:

NSLog(@"Calling dealloc"); 

你的编译器应该警告你传递一个不兼容的指针。

+0

这样做! GOOD眼睛! – Mark 2010-06-10 21:25:22

+0

+1 expecially对于“你的编译器应该警告......”......我们学习:永远不要忽视警告! – ShinTakezou 2010-06-11 10:10:19

0

你有没有添加这些到@interface ...

@property(assign) int numberOfSides, minimumNumberOfSides, maximumNumberOfSides; 

和这些进入@implementation

@synthesize numberOfSides, minimumNumberOfSides, maximumNumberOfSides; 

的制定者不会自动除非你明确@synthesize生成它。

+0

我在.h @property int numberOfSides; @property int minimumNumberOfSides; @property int maximumNumberOfSides; 而在.m中: @synthesize numberOfSides; @synthesize minimumNumberOfSides; @synthesize maximumNumberOfSides; 那些制定者/ getters工作得很好。我的问题是分配和释放。我认为没有什么特别的事情要做,因为我的爱人都不是对象。 – Mark 2010-06-10 21:21:58

+0

不应该导致另一种问题(例如像未知的选择器)?我也会考虑autorelease池... – ShinTakezou 2010-06-10 21:24:10

+0

@Mark:我看不到你的发布代码中有任何内存管理错误。 – kennytm 2010-06-10 21:24:38

0

它撞上了哪条线?错误是否可以在你在initWithNumberOfSides中调用的方法之一中?

如果做“构建和调试”,以找到它崩溃没有帮助,我会打开NSZombieEnabled发现问题(不要忘了将它关闭!)

相关问题