Метод с указателем в качестве аргумента и пулом автоматического выпуска - PullRequest
0 голосов
/ 17 октября 2011

Я нашел пул автоматического выпуска внутри метода, передающий указатель в качестве аргумента.

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 ]

1 голос
/ 17 октября 2011

Обратите внимание, что это совершенно неправильно:

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

никогда не существует причины иметь метод, который возвращает void , а принимает ** аргументВместо этого он должен просто возвращать значение напрямую.

Передача по ссылке очень редко используется в Objective-C, обычно только для NSError** параметров, хотя есть несколько других.

1 голос
/ 17 октября 2011

Передача строки таким образом, что любые изменения в строке, сделанные в строке внутри метода, сохранятся за пределами метода. Он берет XML и сохраняет его в предоставленной вами строке.

Пул авто-релиза обрабатывает все операторы авто-выпуска, которые выполняются до того, как этот пул слит. Если вы выполняете набор кода, который может генерировать большое количество автоматически выпущенных объектов, вы можете обернуть этот код в собственный пул автоматического выпуска, вместо того, чтобы ждать следующего разряда по умолчанию. Это не связано с тем, как строка передается в метод.

Если вы планируете вызывать метод суперкласса из переопределенного метода, вам не нужно добавлять еще один пул автоматического выпуска, если вы не выполняете кучу собственных автоматических выпусков вне метода суперкласса. Он по-прежнему будет создавать и обрабатывать свой собственный пул автоматического выпуска, как и раньше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...