NSString的所有权通过NSScanner的引用返回

时间:2013-05-22 19:32:51

标签: objective-c cocoa memory-management reference nsscanner

来自方法的'引用返回'NSString

  • scanString:intoString:
  • scanCharactersFromSet:intoString:
  • scanUpToString:intoString:
  • scanUpToCharactersFromSet:intoString:

在调用实例拥有的NSScanner类中(在自动释放池中保留计数为1且 NOT )或NSScanner实例(保留计数为1且在自动释放池)?

如果是后者,如果用于遍历列表,那么自动释放池气球的大小是不是?

1 个答案:

答案 0 :(得分:2)

value参数
- (BOOL)scanString:(NSString *)string intoString:(NSString **)value;

是Clang ARC文档中Indirect parameters意义上的“间接参数”:

  

间接参数

     

如果函数或方法参数的类型为T*,则T为{。}}   所有权不合格的可保留对象指针类型,然后:

     
      
  • 如果T是const限定的或Class,那么它是隐式限定的   __unsafe_unretained;
  •   
  • 否则,它会被__autoreleasing隐式限定。
  •   

第二种情况适用于此。 __autoreleasing表示:

  

对于__autoreleasing个对象,保留新的指针,   自动释放,并使用原始语义存储到左值。

因此value指向从该函数返回时自动释放的对象。

Xcode自动完成“知道”并显示

[scanner scanString:(NSString *) intoString:(NSString *__autoreleasing *)]

已添加:有关“手动引用计数”,请参阅“高级内存管理编程指南”中的Memory Management Policy

  

您不拥有参考文件返回的对象

     

......在这些情况下,相同的规则适用于已经描述的规则。当您调用这些方法中的任何一个时,都不会创建NSError对象,因此您不拥有它。因此没有必要释放它,......