gpt4 book ai didi

ios - 声明变量时的区别

转载 作者:行者123 更新时间:2023-11-29 02:14:36 25 4
gpt4 key购买 nike

我有一个类:

@interface Person : NSObject {
NSString *_firstname;
}
@property NSString *firstName;
@end

@implementation Person

@synthesize firstname;

@end

这将声明三个变量:firstname、self.firstname 和 _firstname

这三个变量有什么区别以及如何在每种情况下使用?

最佳答案

在现代 Objective-C 中,如果您已经合成了属性,则无需创建实例变量。
从您所写的内容看来,您混淆了属性和 ivar。
属性为您的 ivar 创建 getter 和 setter,但它们不是 ivar,它们是访问您的 ivar 以设置或获取它们的值的方法。
你的类(class)可以这样总结:

@interface Person : NSObject 
@property NSString *firstName;
@end

@implementation Person

@end

在编译时,这将确保您可以使用方法访问您的 ivar,并将您的 ivar 命名为 _firstName
点符号创建对属性的访问,因此 self.firstName(使用 ARC 和默认属性选项 -nonatomic,strong-)调用该方法

- (NSString*)firstName 
{
return _firstName;
}


在调用 self.firstName = @"foo"; 时调用:

- (void) setFirstName:(NSString*)name 
{
if (_firstName == name) {
return;
}
_firstName = name;
}


下划线的实现可能略有不同。

关于ios - 声明变量时的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28893590/

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