指针作为参数和自动释放池的方法

时间:2011-10-17 13:40:48

标签: objective-c

我在一个方法中找到了一个自动释放池,它将一个指针作为参数传递。

1。 2?

之间有什么关系吗?
- (void)exportXMLToString:(NSMutableString **)aString
{
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

    NSMutableString *theString = *aString;

2。 更一般地说,为什么我要将指针传递给字符串不能只是传递字符串本身并将其返回?

3。 如果我想覆盖这样的方法,并从中调用超类方法,我可以写这个吗? (和使用相同的字符串?

 - (void)exportXMLToString:(NSMutableString **)aString
    {
        NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

        NSMutableString *theString = *aString;

            ...

            [super exportXMLToString:aString];
   }

感谢

2 个答案:

答案 0 :(得分:1)

像这样传递字符串使得对方法内部字符串所做的字符串的任何更改都将保留在方法之外。它需要XML并将其存储在您提供的字符串中。

自动释放池只处理在该池耗尽之前发生的所有自动释放语句。如果您正在执行一堆可以生成大量自动释放对象的代码,那么您可以将该代码包装在自己的自动释放池中,而不是等到下一次默认的代码消耗时。它与字符串传递给方法的方式无关。

如果您计划从重写方法调用超类方法,则除非您在超类方法之外进行一系列自动释放,否则不需要添加另一个自动释放池。它仍将像以前一样创建和处理自己的自动释放池。

答案 1 :(得分:1)

请注意,这是完全错误的:

 - (void)exportXMLToString:(NSMutableString **)aString

从不有理由让一个方法返回void 并且获取**参数。相反,它应该直接返回值。

在Objective-C中很少使用通过引用传递,通常仅用于NSError**参数,尽管还有一些其他参数。