gpt4 book ai didi

objective-c - Objective C 为类属性赋值的快捷方式

转载 作者:行者123 更新时间:2023-12-03 17:56:02 24 4
gpt4 key购买 nike

我不确定我是否使用了正确的术语,请理解我昨天刚刚开始尝试 Objective,而且我来自 C# 背景,所以我可能会使用一些 C# 术语。

话虽如此。我有两个类。 1 个使用另一个类作为属性的主类:

@class Fighter;
@interface Match : NSObject{
int Id;
Fighter *Fighter;
int FScore;
}
@property int Id, FScore;
@property Fighter *Fighter;

@end

*实现:

@implementation Match
@synthesize Id, FScore, Fighter;
@end

这是引用的类:

@interface Fighter : NSObject{
int Id;
NSString *Name;
}
@property int Id;
@property NSString *Name;
@end


@implementation Fighter
@synthesize Id, Name;
@end

现在这就是我创建对象实例的方式

@autoreleasepool {

// insert code here...
NSLog(@"Hello, World!");

Match *match = [[Match alloc]init];
match.Id = 1;
match.Fighter = [[Fighter alloc]init];
match.Fighter.Id = 9;
match.Fighter.Name = @"womp";
}

现在,我想知道是否有为 Fighter 实例分配值的快捷方式。就像在 c# 中一样,你可以这样做:

match.Fighter = new Fighter{ Id = 9, Name = "womp" };

想知道以防万一我可以向该类或任何其他类添加更多属性。

附注。

使用[[Class alloc] init]比[Class new]更好吗??

谢谢!!!

最佳答案

在 Objective-C 中执行此操作的典型方法是创建一个自定义 -init 方法,其中包含要初始化的属性的参数。所以你可能有一个 -[Fighter initWithID:name:] 方法:

- (id)initWithID:(NSInteger)id name:(NSString *)name
{
self = [self init];
if (self) {
self.ID = id;
self.name = name;
}
return self;
}

然后您可以使用以下命令创建战斗机对象:

match.fighter = [[Fighter alloc] initWithID:9 name:@"womp"];

对您的代码的一些评论。在 Objective-C 中,属性名称通常以小写字母开头。异常(exception)情况是,如果属性名称是首字母缩略词,例如“ID”或“URL”,在这种情况下,您将其全部大写。方法和变量名称也是如此。大写名称保留用于包括类名称的类型(例如“Fighter”)。

关于你的附言问题是,+new只是调用alloc然后init并返回结果,所以它们是完全等价的。也就是说,+new 在 Objective-C 程序员中并不常用,而且您会发现 alloc/init 使用更多更频繁。

最后,假设您正在使用现代 Objective-C 运行时(10.6+ 和 64 位)部署到目标,您不需要显式声明实例变量来支持您的 @properties,因为编译器会综合(为您创建)它们。使用最新版本的 Xcode(4.4 及更高版本),您甚至不需要 @synthesize 语句,因为编译器也会为您插入这些语句。 @property 语句就是您所需要的。

关于objective-c - Objective C 为类属性赋值的快捷方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13299461/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com