我的视图控制器中有一个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
答案 0 :(得分:0)
如果self.NavigationURL
是retain
(或者您正在使用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;
}