gpt4 book ai didi

objective-c - Objective-c 中的 "instance variable"和 "property"之间有区别吗?

转载 作者:IT老高 更新时间:2023-10-28 11:23:23 24 4
gpt4 key购买 nike

Objective-c 中的“实例变量”和“属性”有区别吗?

对此我不太确定。我认为“属性”是具有访问器方法的实例变量,但我可能想错了。

最佳答案

属性是一个更抽象的概念。实例变量实际上只是一个存储槽,就像结构中的一个槽。通常其他对象不应该直接访问它们。另一方面,属性是可以访问的对象的属性(听起来很模糊,但应该如此)。通常一个属性会返回或设置一个实例变量,但它可以使用来自多个或根本不使用的数据。例如:

@interface Person : NSObject {
NSString *name;
}

@property(copy) NSString *name;
@property(copy) NSString *firstName;
@property(copy) NSString *lastName;
@end

@implementation Person
@synthesize name;

- (NSString *)firstName {
[[name componentsSeparatedByString:@" "] objectAtIndex:0];
}
- (NSString *)lastName {
[[name componentsSeparatedByString:@" "] lastObject];
}
- (NSString *)setFirstName:(NSString *)newName {
NSArray *nameArray = [name componentsSeparatedByString:@" "];
NSArray *newNameArray [[NSArray arrayWithObjects:newName, nil] arrayByAddingObjectsFromArray:[nameArray subarrayWithRange:NSMakeRange(1, [nameArray size]-1)]];
self.name = [newNameArray componentsJoinedByString:@" "];
}
- (NSString *)setLastName:(NSString *)newName {
NSArray *nameArray = [name componentsSeparatedByString:@" "];
NSArray *newNameArray [[nameArray subarrayWithRange:NSMakeRange(0, [nameArray size]-2)] arrayByAddingObjectsFromArray:[NSArray arrayWithObjects:newName, nil]];
self.name = [newNameArray componentsJoinedByString:@" "];
}
@end

(注意:上面的代码是错误的,因为它假设名称已经存在并且至少有两个组件(例如“Bill Gates”而不仅仅是“Gates”)。我觉得修正这些假设会成为实际的点代码不太清楚,所以我只是在这里指出,所以没有人会无辜地重复这些错误。)

关于objective-c - Objective-c 中的 "instance variable"和 "property"之间有区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/843632/

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