【发布时间】:2010-08-25 19:38:32
【问题描述】:
我有一个自定义类:
@interface Player : NSObject {
NSInteger mPlayerNo;
}
-(id) initWithNum:(NSInteger) playerNum;
@implementation Player
-(id) initWithNum:(NSInteger) playerNum
{
if(![super init])
return nil;
...
mPlayerNo=playerNum;
return self;
}
@end
我需要另一个程序类中的 Player 对象数组:
@interface Spec : NSObject {
NSMutableArray * mPlayers;
...
}
所以,我试图在 Spec 类的 init 方法中填充 mPlayers arr,如下所示:
- (id)init {
if(![super init])
return nil;
NSMutableArray * _array=[[NSMutableArray alloc] init];
mPlayers=_array;
[_array release];
Player * _player=[[[Player alloc] initWithNum:(NSInteger)1]autorelease];
[mPlayers addObject:_player]; // crashes with EXC_BAD_ACCESS
它不起作用。但是如果我改变了
NSMutableArray * _array=[[NSMutableArray alloc] init];
mPlayers=_array;
[_array release];
与
mPlayers=[[NSMutableArray array]retain];
一切正常。 这对我来说很奇怪。请帮助理解 alloc init 的问题。
【问题讨论】:
标签: objective-c