gpt4 book ai didi

ios - 有人可以解释这个@synthesize 语法吗?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:27:27 29 4
gpt4 key购买 nike

我在最新的 iOS SDK 中使用带有核心数据的示例导航 View 模板。

rootViewController.m 文件中,我在 @synthesize 行中看到了这一点:

@synthesize fetchedResultsController=fetchedResultsController_, managedObjectContext=managedObjectContext_;

头文件所在位置:

@private
NSFetchedResultsController *fetchedResultsController_;
NSManagedObjectContext *managedObjectContext_;

@property (nonatomic, retain) NSManagedObjectContext *managedObjectContext;
@property (nonatomic, retain) NSFetchedResultsController *fetchedResultsController;

这是否意味着它们都是 @synthesized(创建 getter 和 setter)但是一个被设置为等于另一个? fetchedResultsController 似乎也是 rootViewController.m 文件中的一种方法。

此 SDK 版本中的模板已更改,我正在关注 Apress 书籍更多 iPhone 3 开发,这确实让事情变得困惑。

最佳答案

@synthesize 语法中,= 的左侧(这只是合成用于此语法的字符,而不是赋值运算符) 是属性(和相关方法) 的名称,= 的右侧是用于命名属性的实例变量。 p>

在上面的例子中,@synthesize fetchedResultsController=fetchedResultsController_ 创建了一个 fetchedResultsController getter 方法和一个 setFetchedResultsController: setter 方法,两者都使用 < strong>fetchedResultsController_ 存储的实例变量。

同样,@synthesize managedObjectContext=managedObjectContext_ 创建 ma​​nagedObjectContextsetManagedObjectContext: 访问器方法,两者都由 ma​​nagedObjectContext_ 实例变量。

如果没有明确指定“右侧”(如果声明为 @synthesize fetchedResultsController, managedObjectContext;),合成将采用相同的名称实例变量作为属性。一些 Objective-C 程序员不喜欢让它保持这种默认行为,因为很容易犯这样的错误,即打算设置局部函数范围变量,而不是设置实例变量。对所有实例变量使用下划线使其意图更加清晰。

需要说明的是,多个@synthesize属性可以通过逗号分隔组合成一个;每个仍然是自己的声明,因此上面的内容完全等同于:

@synthesize fetchedResultsController=fetchedResultsController_;
@synthesize managedObjectContext=managedObjectContext_;

同样毫无意义的是,在较新的 Xcode/iOS 版本中,如果未明确定义实例变量,将自动创建实例变量,如果未指定,也假定为 @synthesize 声明。这些差异在 Apple 的快速引用 Objective-C Feature Availability Index 中进行了解释。 .

关于ios - 有人可以解释这个@synthesize 语法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3277209/

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