据我了解,在您的非 ARC 代码中,您只需像往常一样使用启用 ARC 的库执行所有保留/释放(就像与其他非 ARC 代码交互一样)。
我创建了一个简单的应用程序来证明这种行为。
测试代码 -没有ARC编译
- (void)testARC
{
ARCLib *al = [[ARCLib alloc] init];
NSLog(@"%p retainCount = %u", al, [al retainCount]);
[al release];
ARCLib *al2 = [ARCLib arcLib];
NSLog(@"%p retainCount = %u", al2, [al2 retainCount]);
}
ARCLib -使用ARC编译
@implementation ARCLib
+ (id)arcLib
{
return [[self alloc] init];
}
- (id)init
{
self = [super init];
if (self)
{
NSLog(@"%p init",self);
}
return self;
}
- (void)dealloc
{
NSLog(@"%p dealloc",self);
}
@end
结果
2012-12-13 20:15:21.879 ARCTest[15206:907] 0x1e821500 init
2012-12-13 20:15:21.883 ARCTest[15206:907] 0x1e821500 retainCount = 1
2012-12-13 20:15:21.884 ARCTest[15206:907] 0x1e821500 dealloc
2012-12-13 20:15:21.885 ARCTest[15206:907] 0x1dd26060 init
2012-12-13 20:15:21.886 ARCTest[15206:907] 0x1dd26060 retainCount = 1
2012-12-13 20:15:21.893 ARCTest[15206:907] 0x1dd26060 dealloc
回答你的问题
您应该释放 obj1,但不需要释放 obj2。