假设有方法:
- (void)doSomething:(id)thing
{
uintptr_t retainCount = _objc_rootRetainCount(thing);
//do some thing
}
编译器是否会保留传递对象并不十分清楚。
我在xcode5中测试,似乎编译器会在这种情况下保留传递对象,与(id __strong)
相同。但是当我使用(id __weak)
时它也会保留它,这很奇怪。如果我使用__autoreleasing
或__unsafe_unretained
,则不保留传递对象,但在使用{{1}时应该保留它}。
与使用局部变量或实例变量使用这些所有权限定符完全不同,预期的行为和原因是什么。我无法从Apple的文档中找到任何相关信息。
我使用以下方法进行测试:
__autoreleasing
我在方法中使用它,然后调用方法。