【发布时间】:2011-09-30 02:56:27
【问题描述】:
我使用下面的代码来设置一个 NSString
#import <Foundation/Foundation.h>
@interface AppController : NSObject
{
NSString *myString;
}
@property (nonatomic, retain) NSString *myString;
@end
#import "AppController.h"
@implementation AppController
@synthesize myString;
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
NSString *zs0= [[NSString alloc] initWithFormat: @"abc"];
myString =[zs0 retain];
[zs0 release];//breakpoint
}
- (void)dealloc {
[myString release];
[super dealloc];
}
@end
当我在断点检查 myString 的值时 它总是说“超出范围”
欢迎评论
【问题讨论】:
-
有时调试器会这样做。在控制台窗口中输入“po myString”,看看你会得到什么。
-
(保留/释放有点多余。你可以废弃这对。或者,我最喜欢的,做
self.myString = [NSString stringWithFormat:@"abc"];。) -
(这是我关于这个主题的最后一句话。)
-
建议不要在
init方法中调用访问器。您应该直接设置 ivars 的值。 -
同样的结果,如果我在代码 'myString =[zs0 retain];' 之前定义 myString而不是定义为对象 AppController 的成员,一切正常
标签: cocoa