@synthesize 羽毛 = _feathers? [复制]
Posted
技术标签:
【中文标题】@synthesize 羽毛 = _feathers? [复制]【英文标题】:@synthesize feathers = _feathers? [duplicate] 【发布时间】:2012-03-21 08:18:24 【问题描述】:可能重复:What exactly does @synthesize do?Can someone explain this @synthesize syntax?
@interface Duck : NSObject
NSArray *_feathers;
@property (nonatomic,retain) NSArray *feathers;
@end
@implementation Duck
@synthesize feathers=_feathers;
@end
我想知道你在做@synthesize feathers = _feathers 时到底发生了什么?
【问题讨论】:
你应该看看这个问题***.com/questions/822487/… 开始阅读Objective-C 文档。恩尤其是关于properties的部分 除了 Apple 的文档之外,一些搜索可以帮助您 - 即使在这个站点中也是如此。就在昨天,我回答了同样的问题:***.com/questions/9771434/… 【参考方案1】:在你的情况下(因为你的属性是非原子的)
@synthesize feathers=_feathers;
等于
- (void)setFeathers:(NSArray *)newFeathers
if (newFeathers != _feathers)
[_feathers release];
_feathers = [newFeathers retain];
- (NSArray *)feathers
return feathers_;
【讨论】:
不完全——你还必须检查 setter 中的_fathers != fathers
以防你错误地用你的第一个 release
解除了父对象。 (处理问题的另一种方法是autorelease
而不是release
)
@deanWombourne 或者在释放旧值之前保留新值,这样如果它是同一个对象,retainCount 就不会下降到 0。
@SlippD.Thompson 这就是我的意思:) - 不过你的解释更好!
@deanWombourne 在我看来这是两种不同的方法。您的(检查两个变量是否不是完全相同的对象/值)在 setter 具有不想触发的其他副作用或处理分配的值时效果更好不是对象指针。 retain-before-retain 方法适用于棘手的所有权情况……在传递所有权、处理线程以及其他我现在不记得的时候,通常会尽量避免。无论如何,它有它的时间和地点(通常是在同一时间和地点,一个人正在挠头)。
啊,我会通过 autorelease
而不是 release
在初始对象上完成你的“额外保留而不是 if”方法 :) 我想这取决于你希望你的内存管理如何工作。以上是关于@synthesize 羽毛 = _feathers? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
typescript 这些是Feathers.js的基本类型,基于DefinitelyTyped for Express中的那些。这不是羽毛插件的类型,但确实有
如何使用 feathers.js 将文件包含到 index.html?