NSString cannot be released
Posted
by
Stanley
on Stack Overflow
See other posts from Stack Overflow
or by Stanley
Published on 2012-11-02T16:49:21Z
Indexed on
2012/11/15
11:03 UTC
Read the original article
Hit count: 180
objective-c
|nsstring
Consider the following method and the caller code block. The method analyses a NSString
and extracts a "http://"
string which it passes out by reference as an auto release object.
Without releasing g_scan_result
, the program works as expected. But according to non-arc rules, g_scan_result
should be released since a retain has been called against it.
My question are :
- Why
g_scan_result
cannot be released ? - Is there anything wrong the way
g_scan_result
is handled in the posted coding below ? - Is it safe not to release
g_scan_result
as long as the program runs correctly and the XCode Memory Leak tool does not show leakage ? - Which XCode profile tools should I look into to check and under which subtitle ?
Hope somebody knowledgeable could help.
- (long) analyse_scan_result :(NSString *)scan_result target_url :(NSString **)targ_url {
NSLog (@" RES analyse string : %@", scan_result);
NSRange range = [scan_result rangeOfString:@"http://"
options:NSCaseInsensitiveSearch];
if (range.location == NSNotFound) {
*targ_url = @"";
NSLog(@"fnd string not found");
return 0;
}
NSString *sub_string = [scan_result substringFromIndex : range.location];
range = [sub_string rangeOfString : @" "];
if (range.location != NSNotFound) {
sub_string = [sub_string substringToIndex : range.location];
}
NSLog(@" FND sub_string = %@", sub_string);
*targ_url = sub_string;
return [*targ_url length];
}
The following is the caller code block, also note that g_scan_result has been declared and initialized (on another source file) as :
NSString *g_scan_result = nil;
Please do send a comment or answer if you have suggestions or find possible errors in code posted here (or above). Xcode memory tools does not seem to show any memory leak. But it may be because I do not know where to look as am new to the memory tools.
{
long url_leng = [self analyse_scan_result:result target_url:&targ_url];
NSLog(@" TAR target_url = %@", targ_url);
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Scanned Result"
message:result
delegate:g_alert_view_delegate
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
if (url_leng) {
// ****** The 3 commented off statements
// ****** cannot be added without causing
// ****** a crash after a few scan result
// ****** cycles.
// ****** NSString *t_url;
if (g_system_status.language_code == 0)
[alert addButtonWithTitle : @"Open"];
else if (g_system_status.language_code == 1)
[alert addButtonWithTitle : @"Abrir"];
else
[alert addButtonWithTitle : @"Open"];
// ****** t_url = g_scan_result;
g_scan_result = [targ_url retain];
// ****** [t_url release];
}
targ_url = nil;
[alert show];
[alert release];
[NSTimer scheduledTimerWithTimeInterval:5.0
target:self
selector:@selector(activate_qr_scanner:)
userInfo:nil
repeats:NO
];
return;
}
© Stack Overflow or respective owner