React Native 在文件范围内声明与实现之间的差异

bqujaahr  于 2023-01-31  发布在  React
关注(0)|答案(1)|浏览(113)

我是Objective-C的新手,我在浏览code时遇到了这个:

@implementation ThreadManager

@synthesize bridge = _bridge;

NSMutableDictionary *threads;

我可以这样写吗:

@implementation ThreadManager {
    NSMutableDictionary *_threads;
    RCTBridge *_bridge;
}

也有人可以看看代码,请让我知道,如果@synthesize bridge = _bridge;是实际使用?我认为这是多余的。

iklwldmw

iklwldmw1#

在这两种情况下,这是不同的事情。
@synthesize创建访问器(-bridge-setBridge:)。在@implementation中声明ivar不会创建访问器。
@synthesize的这种风格在今天并不常见,通常也是不必要的(正如所写的,它几乎肯定是这个属性的默认值)()。但是它不会被@implementation ivar替换。它不会被任何东西替换。你只需要声明@property。也就是说,它不会伤害任何东西。有关详细信息,请参阅声明的属性。
)我查阅了您引用的代码,了解了他们使用@sythesize的原因。bridge是在协议中声明的,而不是直接在接口中声明的,因此在本例中需要它。
这里的threads是一个类变量,由ThreadManager的所有示例共享(更典型的做法是将这些变量设置为static,但不是强制性的;在这种形式下,它实际上只是一个全局变量,但实际上是一回事)。这不是一个真正的“Objective-C的东西”。它的工作方式就像常规C一样。您修改的代码使它成为一个示例变量,这是不同的。
@implementation中声明ivars在现代ObjC中是非常罕见的。我这么做多年的唯一原因是为了在暴露纯ObjC接口的对象中保存C++属性,或者偶尔保存一个我想直接操作的私有C类型(没有访问器)。@property语法更好,也更常见。

相关问题