包裹了整個事情。不要擔心回報。它會弄清楚。
I.e.編譯器將其轉換爲邏輯上等同:(或者你可以明確地清理邏輯)
- (void)downloadImageToCache:(NSString*)_urlImage
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
if (!(_urlImage) || (_urlImage == nil))
{
//[pool drain];
//return;
} else {
NSURL *url = [NSURL URLWithString:_urlImage];
NSData *data = [[[NSData alloc] initWithContentsOfURL:url] autorelease];
if (data != nil)
{
...do something...
}
else
{
...do something...
}
}
[pool drain];
}
其簡化爲:
- (void)downloadImageToCache:(NSString*)_urlImage {
@autoreleasepool {
if (_urlImage != nil) {
NSURL *url = [NSURL URLWithString:_urlImage];
NSData *data = [[[NSData alloc] initWithContentsOfURL:url] autorelease];
if (data != nil) {
// ...do something...
} else {
//...do something...
}
}
}
}
或許(更少的嵌套的凹痕永遠是我的偏好):
- (void)downloadImageToCache:(NSString*)_urlImage {
if (_urlImage == nil) {
NSLog(@"[%@ %@] Error Message", NSStringFromClass([self class]), NSStringFromSelector(_cmd));
return;
}
@autoreleasepool {
NSURL *url = [NSURL URLWithString:_urlImage];
NSData *data = [[[NSData alloc] initWithContentsOfURL:url] autorelease];
if (data != nil) {
// ...do something...
} else {
//...do something...
}
}
}
目前的方法有什麼問題? – 2013-04-15 19:55:30
@ H2CO3:ARC不允許使用。 –
@MartinR我相信我見過'@autoreleasepool {}'和ARC一起使用。 (但是,無論如何,誰在乎ARC?我不這麼認爲)。 – 2013-04-15 20:01:37