以下列方式解析此document on class clusters,NSNumber
实施initWithChar:
:
- (id)initWithChar:(char)c
{
[self release];
return [[__NSCharNumber alloc] initWithChar:c];
}
同样,您可以使用此模式从Nib初始化视图:
- (id)initWithFrame:(CGRect)frame
{
id realSelf = [[self class] nib] instantiateWithOwner:nil options:nil][0];
realSelf.frame = frame;
[self release];
return realSelf;
}
我想知道,在这些情况下,ARC是否管理未归还self
的释放?是否记录在任何地方?
答案 0 :(得分:6)
找到详细信息in the clang documentation。
init
隐式使用__attribute__((ns_consumes_self))
属性,这意味着虽然self
定义为__strong id self
,但初始分配不会执行保留。这意味着只要重新分配self
或函数终止,self
就会使用标准的强规则发布。
要获得+1输出,会有一个隐式__attribute((ns_returns_retained))
,它会阻止返回的对象在最后被释放。
在较高级别,ARC计划在函数结束时释放self
一个额外时间的初始值,同时保留返回值,保持其+1输出。
答案 1 :(得分:3)
它将属于标准的ARC对象所有权规则,因此“未返回的self
”最终会没有任何强引用,因此当它超出范围时会自动为您释放。