动态更改NSURL的URL

时间:2012-06-20 10:59:21

标签: iphone objective-c ios xcode ipad

我的视图控制器中有一个NSURL成员。根据用户输入,如按钮用户按下,我必须动态获取url字符串并创建一个NSURL对象。

目前我每次创建一个NSURL对象。我知道这是内存泄漏。有没有什么方法可以更改NSRUL成员的url字符串值而不删除其内存?

我无法释放NSURL成员,因为项目位于@autoreleasepool


代码段:

@interface myViewController : UIViewController <MyWebViewDelegate>
{
     NSURL* NavigationURL;

         ...
}

@implementation myViewController

...

-(IBAction) LoadURL
{
    if (self.NavigationURL)
    {
        NSURLRequest *Request = [NSURLRequest requestWithURL:NavigationURL cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0];
        [WebView loadRequest:Request];
    }
}


- (IBAction)onHomeClick:(UIButton *)sender 
{ 
    switch (sender.tag) 
    {
        case 101: 
            {
                self.NavigationURL = [[NSURL alloc] initWithString:@"https://zzzqmsdb.xxxxyyyy.com/sites/pex/iPadFiles/CommAndCoord.pdf"];        
                [self LoadURL];
            }
            break;

        case 102: 
            {
                [self stopResourcesIfAlreadyLoading];

                self.NavigationURL = [[NSURL alloc] initWithString:@"https://zzzqmsdb.xxxxyyyy.com/sites/pex/iPadFiles/PartCulture.pdf"];        

                [self LoadURL];
            }
            break;
}
@end

3 个答案:

答案 0 :(得分:0)

如果self.NavigationURLretain(或者您正在使用ARC strong)属性,那么就没有问题。实际上,分配给该属性将自动为您处理内存管理,并且您将没有内存泄漏。

如果你没有使用ARC而你的财产属于retain,你必须小心使你的对象成为autoreleased个:

self.NavigationURL = [[[NSURL alloc] initWithString:@"https://zzzqmsdb.xxxxyyyy.com/sites/pex/iPadFiles/CommAndCoord.pdf"] autorelease];        

答案 1 :(得分:0)

您可以使用[NSUrl URLWithString:]方法,而不是每次都分配它。

就像这样

self.NavigationURL = [NSURL URLWithString:@"https://zzzqmsdb.xxxxyyyy.com/sites/pex/iPadFiles/PartCulture.pdf"];  

答案 2 :(得分:0)

使用它:

  -(void)LoadURL:(NSURL *)url
{
if (urlL)
{
    NSURLRequest *Request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0];

    [WebView loadRequest:Request];
}
}


- (IBAction)onHomeClick:(UIButton *)sender 
{
switch (sender.tag) 
{
    case 101: 
        {
            self.NavigationURL = [NSURL URLWithString:@"https://zzzqmsdb.xxxxyyyy.com/sites/pex/iPadFiles/CommAndCoord.pdf"];        
            [self LoadURL:self.NavigationURL];
        }
        break;

    case 102: 
        {
            [self stopResourcesIfAlreadyLoading];

            self.NavigationURL = [NSURL URLWithString:@"https://zzzqmsdb.xxxxyyyy.com/sites/pex/iPadFiles/PartCulture.pdf"];        

            [self LoadURL:self.NavigationURL];
        }
        break;
 }