如果在 class 扩展中重新定义,属性的内存管理是否会发生变化?
Can the memory management of a property change if it's redefined in a class extension?
如果我有这样的房产:
//test.h
@interface test
@property (nonatomic, readonly, weak) NSObject x;
@end
在实现文件中重新定义为read/write:
// 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
中省略它们,如果您在 [=] 中包含它们14=] 两者必须匹配。
话虽如此,我不知道这是否有记载。但是 Objective-C 的语义也没有在任何地方正式定义。所以使用风险自负。
建议:重复一遍即可。
如果我有这样的房产:
//test.h
@interface test
@property (nonatomic, readonly, weak) NSObject x;
@end
在实现文件中重新定义为read/write:
// 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
中省略它们,如果您在 [=] 中包含它们14=] 两者必须匹配。
话虽如此,我不知道这是否有记载。但是 Objective-C 的语义也没有在任何地方正式定义。所以使用风险自负。
建议:重复一遍即可。