我是Objective-C的新手,我在浏览代码时遇到了这个:
@implementation ThreadManager
@synthesize bridge = _bridge;
NSMutableDictionary *threads;
我可以这样写吗:
@implementation ThreadManager {
NSMutableDictionary *_threads;
RCTBridge *_bridge;
}
也可以有人看看代码,请让我知道如果@synthesize bridge = _bridge;
实际上被使用?我认为这是多余的。
在这两种情况下,这是不同的事情。
@synthesize
创建访问器(-bridge
和-setBridge:
)。在@implementation
中声明ivar不能。
@synthesize
的这种样式在今天并不常见,而且通常是不必要的(正如所写的,它几乎肯定是该属性的默认值)(*)。但它没有被@implementation
变量所取代。它被什么都没有取代。你只需要声明@property
。也就是说,它不会伤害任何东西。详细信息请参见声明属性。
(*)我查了你引用的代码,我知道为什么他们使用@sythesize
。bridge
是在协议中声明的,而不是直接在接口中声明的,所以在这种情况下需要它。
threads
这里是一个类变量,由ThreadManager的所有实例共享(更典型的是让这些static
,但它不是强制性的;在这种形式下,它实际上只是一个全局变量,但实际上这是一回事)。这不是真正的Objective-C的东西。它的工作原理就像普通的c语言。你修改的代码使它成为一个实例变量,这是不同的。
在@implementation
中声明变量在现代ObjC中很少见。多年来我这么做的唯一原因是在暴露纯objc接口的对象中保存c++属性,或者非常偶然地保存我想直接操作的私有C类型(没有访问器)。@property
语法要好得多,也更常用。