我浏览过网络,但找不到任何可能有帮助的内容。我的问题是我可以将ties[x]数组写为NSArray吗?如果可以的话,声明和分配tire类实例对象的语法是什么?
@interface CarClass : NSObject {
EngineClass *engine;
TireClass *tires[4];
}
.
@implementation CarClass
- (id) init {
[super init];
NSLog(@"_init: %@", NSStringFromClass([self class]));
engine= [[EngineClass alloc] init];
tires[0]= [[TireClass alloc] init];
tires[1]= [[TireClass alloc] init];
tires[2]= [[TireClass alloc] init];
tires[3]= [[TireClass alloc] init];
return self;
}
编辑:
这是我的 CarClass 的 dealloc 方法
- (void) dealloc {
NSLog(@"_deal: %@", NSStringFromClass([self class]));
[engine release];
[tires release];
[super dealloc];
}
对于下面 NSArray 中的保留仍然有点困惑,如果我向 CarClass:init 添加额外的 [轮胎保留],那么轮胎不会被释放。然而,由于现在的代码是轮胎释放,有或没有末端保留(即)
tires = [[NSArray arrayWithObjects:
[[[TireClass alloc] init] autorelease],
[[[TireClass alloc] init] autorelease],
[[[TireClass alloc] init] autorelease],
[[[TireClass alloc] init] autorelease],
nil] retain];
tires = [NSArray arrayWithObjects:
[[[TireClass alloc] init] autorelease],
[[[TireClass alloc] init] autorelease],
[[[TireClass alloc] init] autorelease],
[[[TireClass alloc] init] autorelease],
nil];
最终编辑:我还认为,如果没有单个轮胎上的自动释放,最终在 dealloc 中释放 NSArray 将释放数组及其指向的对象,但情况似乎并非如此。
干杯-加里-
最佳答案
@interface CarClass : NSObject {
EngineClass *engine;
NSArray *tires;
}
.
@implementation CarClass
- (id) init {
self = [super init];
if (self == nil)
return nil;
NSLog(@"_init: %@", NSStringFromClass([self class]));
engine= [[EngineClass alloc] init];
tires = [[NSArray arrayWithObjects:
[[[TireClass alloc] init] autorelease],
[[[TireClass alloc] init] autorelease],
[[[TireClass alloc] init] autorelease],
[[[TireClass alloc] init] autorelease],
nil] retain];
return self;
}
关于objective-c - 我可以将下面的轮胎数组设置为 NSArray 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1454678/