Objective c 属性的内存管理是否会发生更改(如果';在类扩展中重新定义的?

Objective c 属性的内存管理是否会发生更改(如果';在类扩展中重新定义的?,objective-c,memory-management,declared-property,Objective C,Memory Management,Declared Property,如果我有这样的财产: //test.h @interface test @property (nonatomic, readonly, weak) NSObject x; @end 在要读/写的实现文件中重新定义: // test.m @interface test () @property (nonatomic, readwrite) NSObject x; @end 我在.h中使用了weak,但在扩展中我什么也没说,该属性会保留'weak'说明符,还是会改为'strong' 当重新定义

如果我有这样的财产:

//test.h

@interface test
@property (nonatomic, readonly, weak) NSObject x;
@end
在要读/写的实现文件中重新定义:

// test.m
@interface test ()
@property (nonatomic, readwrite) NSObject x;
@end
我在.h中使用了weak,但在扩展中我什么也没说,该属性会保留'weak'说明符,还是会改为'strong'


当重新定义属性时,关键字strong/assign/weak是否会被覆盖?

使用Xcode 5.1.1进行的简单测试显示保留了
weak
属性。
assign
strong
属性也是如此-您可以在
.h
中指定它们,并在
.m
中省略它们,如果您将它们包括在
.m
中,则两者必须匹配

话虽如此,我不知道这是否在任何地方都有记录。但是Objective-C的语义也没有正式定义。因此,使用风险自负。


建议:重复一下。

作为一种常见做法,我总是在类扩展中指定属性的
strong/weak/assign
属性。只读公共声明中不需要它。@rmaddy-在
.h
中仅声明
readonly
,在
.m
中的类扩展中声明
readwrite,weak
,在Xcode 5.1.1下给出“主属性声明隐式强,而类扩展中的重新声明弱”。但是,在扩展中包含
strong
assign
不会引起编译器的愤怒。后来的编译器是否改变了这一点?@CRD Hmmm。我想我没有用
弱的
属性来做这件事。很高兴知道。如何检查属性是否已设置?我正在设法检查这些东西。谢谢编译时只需读取
.h
;对于运行时查找,请在文档中选择函数
property\u getAttributes