我是Objective-C的新手,我在浏览code时遇到了这个:
@implementation ThreadManager
@synthesize bridge = _bridge;
NSMutableDictionary *threads;
我可以这样写吗:
@implementation ThreadManager {
NSMutableDictionary *_threads;
RCTBridge *_bridge;
}
也有人可以看看代码,请让我知道,如果@synthesize bridge = _bridge;
是实际使用?我认为这是多余的。
1条答案
按热度按时间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
语法更好,也更常见。