我是ARC的新手,我没有问题,我没有找到有关的信息。
我正在编写通信类,我想向第三方类添加属性。
我在communicationClass.h
:
@interface AFHTTPRequestOperation()
@property (nonatomic, assign) id<TargetProtocol> delegate;
@property (nonatomic, assign) SEL callback;
@property (nonatomic, retain) NSString *requestIdentifier;
@property (nonatomic, assign) int authenticationMode;
@end
属性添加正常,我使用它们。我的问题是,
即使AFHTTPRequestOperation
,ARC也会发布这些属性
是在另一个文件(我的communicationClass.h
)?
答案 0 :(得分:0)
问题是,如果使用ARC支持编译AFHTTPRequestOperation
类。当答案是时,ARC将处理此问题。否则,它不会,答案是否。
另一件事是使用ARC时retain
应为strong
。
答案 1 :(得分:0)
是您的分机将由ARC处理。
您无需担心。
如果您在weak
strong
和@property
,那会很好看
答案 2 :(得分:0)
我会说“是”,它们将由您管理,这基于此blog article,其中讨论了如何使用objc_setAssociatedObject()
按类别管理属性。在文章的最后,作者说:
注意:当取消分配类对象(UIView对象)时,其属性 (animationIdentifer)将自动发送一条消息。
所以我假设 ARC会为你做这件事。它不是很权威,我知道......
答案 3 :(得分:0)
您正在使用类扩展(不是类别)添加其他属性。只有在您可以访问要扩展的类的原始源代码时,才能使用类扩展。在这种情况下,您可能会在项目中包含AFNetworking
的源代码。
Apple的Programming with Objective-C有关于课程扩展的说法:
类扩展与类别有一些相似之处,但它只能 添加到您在编译时拥有源代码的类 (该类与类扩展同时编译)。该 类扩展声明的方法在 @implementation块为原始类,所以你不能,为 例如,在框架类上声明类扩展,例如 Cocoa或Cocoa Touch类,如NSString。
和
与常规类别不同,类扩展可以添加自己的类别 属性和类的实例变量。如果你宣布一个 类扩展中的属性,编译器会自动执行 合成相关的访问器方法,以及一个实例 变量,在主类实现中。
这表明类扩展添加的属性与它们在原始实现文件中的功能完全相同。但是,文档建议应该在原始实现的同时编译类扩展,我不清楚如果communicationClass.h
实现文件中没有包含AFHTTPRequestOperation.m
,会发生这种情况。
鉴于属性对您有用,我将不得不假设Objective-C运行时正在识别它们,这可能意味着ARC将正常工作。
这可能值得测试。要检查ARC是否正确释放了该属性,我会在您使用此方法添加的属性中存储的类的dealloc
方法中添加一些日志记录。如果在销毁父级时调用dealloc
,那么您将知道它正在工作。