gpt4 book ai didi

objective-c - 在什么情况下@synthesize 在 Objective-c 中是自动的?

转载 作者:太空狗 更新时间:2023-10-30 03:09:15 30 4
gpt4 key购买 nike

在什么情况下@synthesize在Objective-c中是自动的?

也许在使用 LLVM 3.0 及更高版本时?从网上阅读看来 @synthesize 从 Xcode 4 开始是不必要的。但是我正在使用 Xcode 4 并在我没有 @synthesize 属性时收到警告.

Why don't properties get automatically synthesized 的一些回应似乎暗示在某些情况下某些时候可以省略@synthesize。

Another (old) reference暗示 @synthesize 可能会在未来的某个时候自动完成。

最佳答案

自 clang 3.2(大约 2012 年 2 月)起,默认提供 Objective-C 属性的“默认合成”(或“自动属性合成”)。它基本上如您最初阅读的博客文章中所述:http://www.mcubedsw.com/blog/index.php/site/comments/new_objective-c_features/ (除了那篇文章将该功能描述为“启用,然后禁用”;我不知道这是 Xcode 的问题还是 clang 开发人员自己在这个问题上来回反复)。

据我所知,在 clang 3.2 中,属性不会默认合成的唯一情况是这些属性是从协议(protocol)继承的。这是一个例子:

#import <Foundation/Foundation.h>

@protocol P
@property int finicky;
@end

@interface A : NSObject <P>
@property int easygoing;
@end

@implementation A
@end

int main() { A *a = [A new]; a.easygoing = 0; a.finicky = 1; }

如果你编译这个例子,你会得到一个警告:

test.m:11:17: warning: auto property synthesis will not synthesize property
declared in a protocol [-Wobjc-protocol-property-synthesis]
@implementation A
^
test.m:4:15: note: property declared here
@property int finicky;
^
1 warning generated.

如果你运行它,你会从运行时得到一个错误:

objc[45820]: A: Does not recognize selector forward:: (while forwarding setFinicky:)
Illegal instruction: 4

关于objective-c - 在什么情况下@synthesize 在 Objective-c 中是自动的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9368676/

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