Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/110.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone NSString基础知识说明_Iphone_Ios_Ios4_Nsstring - Fatal编程技术网

Iphone NSString基础知识说明

Iphone NSString基础知识说明,iphone,ios,ios4,nsstring,Iphone,Ios,Ios4,Nsstring,可能重复: 我是iPhone编程的初学者。我正在处理NSString。我在下面解释了一个疑问 @implementation Sample; NSString *str; -(void)viewDidLoad { str = [[NSString alloc] initWithString:@"Hello"]; // Why retain count is some random value? (Eg.2147234) NSLog(@"retain count o

可能重复:

我是iPhone编程的初学者。我正在处理NSString。我在下面解释了一个疑问

@implementation Sample;

NSString *str;

-(void)viewDidLoad
{
    str = [[NSString alloc] initWithString:@"Hello"];

    // Why retain count is some random value? (Eg.2147234)
    NSLog(@"retain count of string %d",[str retainCount]);

    [str release];
}

-(void)printString
{
    // Why the value for "str" getting printed here,
    // though its released in viewDidLoad?
    NSLog(@"string is %@",str);
}
  • 不要看
    retainCount
    。这会把你弄糊涂,而且没用

  • 常量字符串直接构建在代码中——它们永远不会被分配或释放。您可以像保留和释放任何其他对象一样保留和释放它们,但不要期望在任何时候释放常量字符串


  • 在objective-c中,init方法不一定返回使用alloc创建的相同对象。它可能释放self,然后返回另一个对象

    initWithString
    的情况下,它很有可能返回@“Hello”常量字符串对象,而不是初始化一个新字符串,因为它更快并且没有负面影响(两个字符串都是不可变的)

    正如@Caleb所说,普通的内存管理规则不适用于常量字符串。你不能释放它,它将永远在那里

    但所有这些都是未经记录的行为,可能会发生变化。你不能依赖它,你发布的代码是有缺陷的,在发布了一些你不应该尝试访问的东西之后

    相反,您应该遵循标准实践,即在处理完对象后,始终应释放对象并将指向该对象的任何指针设置为
    nil
    。如果在释放后将
    str
    设置为
    nil
    ,您将看到预期的行为

    或者更好,只要打开ARC,忘掉所有这些事情