这是我的自定义类:
PolygonShape : NSObject {
int numberOfSides;
int minimumNumberOfSides;
int maximumNumberOfSides;
}
我的自定义初始化方法:
- (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,然后释放应该将其减少为0并调用dealloc,将该消息打印到NSLog但我得到EXC_BAD_ACESS。我可以在创建后访问和更改对象中的字段,直到有效为止。非常感谢您的帮助!
答案 0 :(得分:6)
NSLog("Calling dealloc");
您传递的是常规C字符串,而不是NSString。你需要这样做:
NSLog(@"Calling dealloc");
您的编译器应该警告您传递不兼容的指针。
答案 1 :(得分:0)
您是否已将这些内容添加到@interface
...
@property(assign) int numberOfSides, minimumNumberOfSides, maximumNumberOfSides;
和这些进入@implementation
?
@synthesize numberOfSides, minimumNumberOfSides, maximumNumberOfSides;
除非您明确@synthesize
,否则不会自动生成设置器。
答案 2 :(得分:0)
它崩溃了什么线?错误可能出现在您在initWithNumberOfSides中调用的方法之一吗?
如果进行“构建和调试”以找到崩溃的位置没有帮助,我会打开NSZombieEnabled来查找问题(不要忘记再次关闭它!)