gpt4 book ai didi

ios - autoreleasepool 和带 ARC 的池排水

转载 作者:行者123 更新时间:2023-11-28 20:21:00 25 4
gpt4 key购买 nike

我想用 ARC 迁移这段代码。

我知道我必须使用:

@autoreleasepool {}

但是我的两个pool drain有问题,不知道怎么办。

- (void)downloadImageToCache:(NSString*)_urlImage
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

if (!(_urlImage) || (_urlImage == nil))
{
[pool drain];
return;
}

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
{
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...
}
}
}

关于ios - autoreleasepool 和带 ARC 的池排水,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16023657/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com