0

NSURLビューコントローラーにメンバーがいます。ユーザーが押したボタンなどのユーザー入力に基づいて、URL文字列を動的に取得してNSURLオブジェクトを作成する必要があります。

現在、毎回1つの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
4

3 に答える 3

0

self.NavigationURLretain(または ARC を使用している場合)strongプロパティの場合、そのまま実行しても問題はありません。実際、そのプロパティに割り当てると、自動的にメモリ管理が行われるため、メモリ リークは発生しません。

ただし、 ARC を使用しておらず、プロパティがretain1 である場合は、オブジェクトをautoreleased1にすることに注意する必要があります。

self.NavigationURL = [[[NSURL alloc] initWithString:@"https://zzzqmsdb.xxxxyyyy.com/sites/pex/iPadFiles/CommAndCoord.pdf"] autorelease];        
于 2012-06-20T11:02:09.307 に答える
0

毎回割り当てる代わりに [NSUrl URLWithString:] メソッドを使用できます。

ちょうどこのような

self.NavigationURL = [NSURL URLWithString:@"https://zzzqmsdb.xxxxyyyy.com/sites/pex/iPadFiles/PartCulture.pdf"];  
于 2012-06-20T11:03:48.060 に答える
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;
 }
于 2012-06-20T11:08:17.873 に答える