gpt4 book ai didi

Objective-C 属性,它们是如何工作的?

转载 作者:行者123 更新时间:2023-12-02 21:50:14 26 4
gpt4 key购买 nike


假设我们有一个带有属性 bar 的类 Foo
在 header 中声明如下:

@interface Foo : NSObject {
int bar;
}

@property (nonatomic, assign) int bar;

@end

在 .m 中,我当然有 @synthesize bar;

现在,我的问题是,如果我删除 int bar; 行,该属性的行为方式相同,那么,该行真的有必要吗?我是否遗漏了一些基本概念?

谢谢!

最佳答案

“现代”Objective-C 运行时在遇到 @synthesize 时会自动生成 ivars(如果它们尚不存在)。

跳过它们的优点:

  • 减少代码中的重复。 @property 给出了 ivar 的类型、名称和用途(属性!),因此您不会丢失任何内容。
  • 即使没有显式声明 ivar,您仍然可以直接访问 ivar。 (Xcode 的一个旧版本有一个错误,可以防止这种情况发生,但您不会使用该版本。)

有一些注意事项:

  • 32 位 Mac OS X 上的“旧”运行时不支持此功能。(最新版本的 iOS 模拟器支持此功能。)
  • Xcode 可能不会在调试器中显示自动生成的 ivars。 (我相信这是一个错误。)

由于调试器问题,目前我显式添加所有 ivars 并像这样标记它们:

@interface Foo : NSObject {
#ifndef SYNTHESIZED_IVARS
int ivar;
#endif
}

@property (nonatomic, assign) int bar;

@end

我的计划是在确认调试器能够显示 ivars 后删除该 block 。 (据我所知,这已经发生了。)

关于Objective-C 属性,它们是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4959910/

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