0

我有这个方法

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        UIWebView *t_webView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 44, 
                                                                       320,480)];
        self.webView = t_webView;
        self.accel = [[Accelerometer alloc]init];

        //Potential Memory Leak here
        NSURL *theurl = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"second" ofType:@"html" inDirectory:@"www"]];
        [self.webView loadRequest:[NSURLRequest requestWithURL:theurl]];
        [self.view addSubview:webView];

        [theurl release];//When I add this line, the Memory Leak Warning disappears, but instead I get a "incorrect Decrement of reference count
        theurl = nil;

        [t_webView release];
    }

    return self;
 }

我想我对内存管理一无所知,有人可以帮助我如何避免警告吗?

4

1 回答 1

2
NSURL *theurl = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"second" ofType:@"html" inDirectory:@"www"]];

这将返回一个自动释放的对象。 release稍后在该方法中使用它是不正确的。

泄漏是self.accel = [[Accelerometer alloc]init];; +alloc 意味着 aretain并且对保留属性的分配是另一个。我会建议:

Accelerometer *acc = [[Accelerometer alloc]init];
self.accel = acc;
... do stuff with `acc` ...
[acc release];

如果编译器警告来来去去 / [theurl release],那听起来像是一个分析器错误。

于 2012-10-29T20:12:05.110 回答