如果我有一段看起来像这样的代码:
- (void)testSomething
{
__weak NSString *str = [[NSString alloc] initWithFormat:@"%@", [NSDate date]];
NSLog(@"%@", str);
}
Run Code Online (Sandbox Code Playgroud)
输出将为(null),因为没有对str的强引用,它将在我分配后立即释放.这是有道理的,并在"过渡到ARC"指南中详细说明.
如果我的代码如下所示:
- (void)testSomething
{
__weak NSString *str = [NSString stringWithFormat:@"%@", [NSDate date]];
NSLog(@"%@", str);
}
Run Code Online (Sandbox Code Playgroud)
然后它正确打印出当前日期.显然你会期望它在非ARC世界中工作,因为它str
会被自动释放,因此在此方法退出之前有效.但是,在启用ARC的代码中,人们通常认为两种形式(stringWithFormat
&alloc/initWithFormat
)是等价的.
所以我的问题是,第二个例子的代码是否可以保证在ARC下工作.也就是说,如果我有一个弱引用的对象,我通过什么我们通常会考虑一个自动释放便捷构造得到的,是它保证是安全的使用该引用在同一范围内,我通常会对没有ARC(即,直到方法退出)?