Obj-C:调用release/dealloc导致EXC_BAD_ACCESS

1 memory-management objective-c

这是我的自定义类:

PolygonShape : NSObject {
 int numberOfSides;
 int minimumNumberOfSides;
 int maximumNumberOfSides;
}
Run Code Online (Sandbox Code Playgroud)

我的自定义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;
}
Run Code Online (Sandbox Code Playgroud)

我的dealloc方法:

- (void) dealloc {
 NSLog("Calling dealloc");
 [super dealloc];
}
Run Code Online (Sandbox Code Playgroud)

我崩溃的示例代码:

  PolygonShape *shape1 = [[PolygonShape alloc] initWithNumberOfSides:6 minimumNumberOfSides:5 maximumNumberOfSides:9];
 [shape1 release];
Run Code Online (Sandbox Code Playgroud)

我已经分配了一个PolygonShape,将保留计数增加1,然后释放应该将它减少到0并调用dealloc,将该消息打印到NSLog,但我得到EXC_BAD_ACESS.我可以在创建后访问和更改对象中的字段,直到有效为止.非常感谢您的帮助!

dre*_*lax 6

NSLog("Calling dealloc");
Run Code Online (Sandbox Code Playgroud)

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

NSLog(@"Calling dealloc");
Run Code Online (Sandbox Code Playgroud)

您的编译器应该警告您传递不兼容的指针.