Objective c 我可以将下面的轮胎阵列设置为NSArray吗?
我在网上查过,但找不到任何可能有用的东西。我的问题是我是否可以将tire[x]数组作为NSArray编写,如果可以,那么声明和分配tire类实例对象的语法是什么Objective c 我可以将下面的轮胎阵列设置为NSArray吗?,objective-c,cocoa,Objective C,Cocoa,我在网上查过,但找不到任何可能有用的东西。我的问题是我是否可以将tire[x]数组作为NSArray编写,如果可以,那么声明和分配tire类实例对象的语法是什么 @interface CarClass : NSObject { EngineClass *engine; TireClass *tires[4]; } 编辑: 这是我对CarClass的dealloc方法 - (void) dealloc { NSLog(@"_deal: %@", NSSt
@interface CarClass : NSObject {
EngineClass *engine;
TireClass *tires[4];
}
编辑:
这是我对CarClass的dealloc方法
- (void) dealloc {
NSLog(@"_deal: %@", NSStringFromClass([self class]));
[engine release];
[tires release];
[super dealloc];
}
对于下面的NSArray中的retain仍然有点困惑,如果我在CarClass:init中添加一个额外的[tires retain],那么轮胎不会被释放。但是,由于代码现在为,轮胎释放时有或没有端部保持(即)
最终编辑:我还认为,如果没有单个轮胎上的自动释放,最终释放dealloc中的NSArray将释放数组及其指向的对象,情况似乎并非如此
干杯-加里-
@interface CarClass : NSObject {
EngineClass *engine;
NSArray *tires;
}
您不必总是使用NSArray进行收集。通过这种方式,每个轮胎都有更多的信息:
@interface CarClass : NSObject {
EngineClass *engine;
NSDictionary *tiresDictionary;
}
@implementation CarClass
- (id) init {
self = [super init];
if (!self) {
return nil;
}
NSLog(@"_init: %@", NSStringFromClass([self class]));
engine= [[EngineClass alloc] init];
tiresDictionary = [[NSDictionary dictionaryWithObjectsAndKeys:
[[[TireClass alloc] init] autorelease], @"LeftFrontTyre",
[[[TireClass alloc] init] autorelease], @"RightFrontTyre",
[[[TireClass alloc] init] autorelease], @"LeftRearTyre",
[[[TireClass alloc] init] autorelease], @"RightRearTyre",
nil] retain];
return self;
}
这样,您仍然有一个collection类,但您没有尝试记住数组的哪个索引引用哪个轮胎,而是有一个带有描述性键的字典,这样您就可以通过名称引用每个轮胎。您不必总是使用NSArray进行集合。通过这种方式,每个轮胎都有更多的信息:
@interface CarClass : NSObject {
EngineClass *engine;
NSDictionary *tiresDictionary;
}
@implementation CarClass
- (id) init {
self = [super init];
if (!self) {
return nil;
}
NSLog(@"_init: %@", NSStringFromClass([self class]));
engine= [[EngineClass alloc] init];
tiresDictionary = [[NSDictionary dictionaryWithObjectsAndKeys:
[[[TireClass alloc] init] autorelease], @"LeftFrontTyre",
[[[TireClass alloc] init] autorelease], @"RightFrontTyre",
[[[TireClass alloc] init] autorelease], @"LeftRearTyre",
[[[TireClass alloc] init] autorelease], @"RightRearTyre",
nil] retain];
return self;
}
这样,您仍然有一个collection类,但是您没有尝试记住数组的哪个索引引用哪个轮胎,而是有一个带有描述性键的字典,这样您可以通过名称引用每个轮胎。我将稍微更改Nikolai的示例。因为我不想添加自动释放并保留不需要的代码,所以代码越少,错误越少
@interface CarClass : NSObject {
EngineClass *engine;
NSArray *tires;
}
@implementation CarClass
- (id) init {
self = [super init];
if (self) {
NSLog(@"_init: %@", NSStringFromClass([self class]));
engine= [[EngineClass alloc] init];
tires = [[NSArray alloc] initWithObjects:
[TireClass new], [TireClass new], [TireClass new], [TireClass new], nil];
[tires makeObjectsPerormSelector:@selector(release)];
}
return self;
}
[Tyres MakeObjectsPermSelector:@selector(release)]代码>可能很吓人,但很有用,而且性能也很好。一种性能稍差但可能更清晰的方法是让TireClass实现一个工厂方法,并从该方法创建自动释放的对象。像这样:
+(TireClass)tire;
{
return [[self new] autorelease];
}
另外,请不要把你的班级命名为“某物”班级,如果你这样做,小猫就会死:)我会稍微改变一下尼古拉的例子。因为我不想添加自动释放并保留不需要的代码,所以代码越少,错误越少
@interface CarClass : NSObject {
EngineClass *engine;
NSArray *tires;
}
@implementation CarClass
- (id) init {
self = [super init];
if (self) {
NSLog(@"_init: %@", NSStringFromClass([self class]));
engine= [[EngineClass alloc] init];
tires = [[NSArray alloc] initWithObjects:
[TireClass new], [TireClass new], [TireClass new], [TireClass new], nil];
[tires makeObjectsPerormSelector:@selector(release)];
}
return self;
}
[Tyres MakeObjectsPermSelector:@selector(release)]代码>可能很吓人,但很有用,而且性能也很好。一种性能稍差但可能更清晰的方法是让TireClass实现一个工厂方法,并从该方法创建自动释放的对象。像这样:
+(TireClass)tire;
{
return [[self new] autorelease];
}
另外,请停止将您的类命名为“某物”类,否则小猫会死:)轮胎=[[NSDictionary”应该是“轮胎字典=[[NSDictionary”吗,目前还不是专家,但看起来应该是。如果你把它们都放在字典里……为什么不使用单独的实例变量,比如TireClass*leftFrontTire
,TireClass*righfronttire
,等等?最初的问题是如何将它们存储在一个NSArray中;我只是想指出还有其他的集合可以放入轮胎。实施细节将导致选择on或其他。我现在正在学习,所以欢迎所有想法,非常感谢。@mipadi:iteration over tires.Threes=[[NSDictionary]应该是“tiresDictionary=[[NSDictionary”,目前还不是专家,但看起来应该是。如果你把它们都放在字典里……为什么不使用单独的实例变量,比如TireClass*leftFrontTire
,TireClass*righfronttire
,等等?最初的问题是如何将它们存储在一个NSArray中;我只是想指出还有其他的集合轮胎可以放进去。实现细节将导致选择on或其他。我现在正在学习,所以欢迎所有想法,非常感谢。@mipadi:iteration over tires。我做对了吗,你没有分配数组,而是分配数组包含的对象?很抱歉,我只是想了解一下。代码正在调用+[NSArray arrayWithObjects::
方法,这是一种方便的方法,可以自动分配然后自动删除数组对象(因此附加了对retain
的调用)@mipadi你能解释一下保留位吗?我认为代码保留了NSArray,对象后来会自动删除。只是不确定NSArray会发生什么以及为什么会保留它?@fuzzygoat:类需要拥有它的实例变量。没有保留,它就不拥有数组。如果你想在Cocoa中进行任何编程,你需要阅读内存管理规则。它们非常简单,如果你不这样做,你永远不会100%正确。嗨,查克,我已经在这里打印出来了,但最初它有点鸡和蛋,我试图阅读它们,但没有理解足够的可可粉使它有多大的意义。我现在正在阅读各种书籍,以获得更多的信息在再次阅读之前,请先停止。我是否理解正确,您不分配数组,而是分配它包含的对象?很抱歉,我只是想了解一下。代码正在调用+[NSArray arraywhithobjects::
方法,这是一种方便的方法,可以自动分配,然后自动删除数组对象(因此,附加了对保留的调用
)@mipadi你能解释一下保留位吗?我认为代码保留了NSArray,对象后来会自动删除。只是不确定NSArray会发生什么以及为什么会保留它?@fuzzygoat:类需要拥有它的实例变量。没有保留,它就不拥有数组。如果你想在Cocoa中进行任何编程,你需要阅读内存管理规则。它们非常简单,如果你不这样做,你永远不会100%正确。嗨,查克,我已经在这里打印出来了,但最初它有点鸡和蛋,我试图阅读它们,但没有理解足够的可可粉使它有多大的意义。我现在正在阅读各种书籍,以获得更多的信息G