Objective c 属性只能用@synthesis声明而不能用@property声明吗?
我在我的项目中发现了以下代码(使用ARC)。看起来没有声明属性Objective c 属性只能用@synthesis声明而不能用@property声明吗?,objective-c,Objective C,我在我的项目中发现了以下代码(使用ARC)。看起来没有声明属性adDisplay。只有一个合成语句,编译器不会抱怨它 @interface MyClass() <MyProtocol> { AdDisplay * _adDisplay; } @end @implementation @synthesize adDisplay = _adDisplay; ... @end 如果我想确保adDisplay被强烈保留 谢谢 更新:它确实在协议中声明。这算是实例变量吗?O
adDisplay
。只有一个合成语句,编译器不会抱怨它
@interface MyClass() <MyProtocol> {
AdDisplay * _adDisplay;
}
@end
@implementation
@synthesize adDisplay = _adDisplay;
...
@end
如果我想确保adDisplay
被强烈保留
谢谢
更新:它确实在协议中声明。这算是实例变量吗?Objective-C中的属性是一对方法的名称:setter和getter。声明属性意味着说明这两个方法存在(对于读写属性) 不必有任何真正的存储或内存管理。过去,在手动内存管理下,
assign
、retain
或copy
会影响方法的合成方式
然而,在ARC下,这不再需要。当您将属性声明为strong
或弱
时,它不会影响方法体,只会影响ivar的类型
因为您已经手动声明了ivar
AdDisplay * _adDisplay;
(如strong
)
那么@属性
声明中的strong
或弱
将不会产生任何实际效果,只能作为API使用者的文档
以下工作也将起作用:
@interface MyClass() <MyProtocol>
@end
@implementation
@synthesize adDisplay;
@end
@接口MyClass()
@结束
@实施
@综合叠加显示;
@结束
还要注意,在将项目从MRC迁移到ARC时,这曾经是一个常见的内存泄漏问题。声明为
弱
、ivar声明为强
的属性是否确定该属性未在MyProtocol
或标头内声明?我认为这没有多大意义,否则的话。是的,协议中已经声明了。但在内存管理方面,这是如何工作的呢?是否将其视为实例变量?
@interface MyClass() <MyProtocol>
@end
@implementation
@synthesize adDisplay;
@end