NSString超出范围

时间:2011-09-30 02:56:28

标签: cocoa

我使用下面的代码设置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的值时 它总是说“超出范围”

欢迎任何评论

2 个答案:

答案 0 :(得分:0)

如果你没有使用格式,为什么要使用initWithFormat?接下来,如果你不打算使用它,为什么还要分配zs0?只需将myString设置为您想要的结果即可。 因此,您的代码应如下所示:

myString = [[NSString alloc] initWithString: @"abc"];

尝试一下,一切都应该有效。

答案 1 :(得分:0)

  1. 您不需要临时变量zs0 - 只需将其分配给属性
  2. 由于您没有格式化,因此不需要initWithFormat。
  3. 您不需要分配字符串 - 如果您调用[NSString stringWithString]它将自动释放它,然后当您将其分配给(保留)属性时,它将保留它。
  4. 你过度保留了。你分配给它保留计数为1的字符串,然后保留它给它2,然后你将它分配给一个保留属性,再保留它。
  5. 一种简单的方法是:

    self.myString = [NSString stringWithString:@"abc"];
    

    这将创建一个自动释放的字符串(不是使用alloc创建,按惯例复制),然后属性将保留它。