a
是NSString
的一個實例。我想如果我在發佈之後打印一個字符串,它會使應用程序崩潰。相反,它會返回分配給它的適當值。我的問題是,即使在釋放之後,我們是否應該得到一個物體的價值?如果沒有,爲什麼我能夠看到a
的值,即使在它被釋放後?NSString分配/釋放/保留
.H
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController
{
NSString *a;
}
@end
的.m
- (void)viewDidLoad
{
[super viewDidLoad];
a=[[NSString alloc]initWithString:@"abc"];
// Do any additional setup after loading the view, typically from a nib.
}
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
NSLog(@"String %@",a);
[a release];
NSLog(@"release %@",a);
[a retain];
NSLog(@"retain %@",a);
}
輸出: -
2012-08-24 14:15:49.501 a[1176:f803] string abc
2012-08-24 14:15:53.404 a[1176:f803] release abc
2012-08-24 14:15:55.325 a[1176:f803] retain abc
我假設a是你的控制器的一個屬性,它是如何定義的? – Asciiom
請參閱我的更新後的qn .. – Nina
您不太確定發佈後您可以訪問該對象。它取決於原始對象的內存何時被覆蓋。當你幸運的時候,你可以在不幸運的應用程序崩潰時訪問該對象。 **在釋放它們後嘗試與任何物體一起使用是高風險** – holex