Нужно ли сохранять объект, если я использую его только в рамках одного метода? - PullRequest
0 голосов
/ 23 марта 2010

Я получаю странные ошибки EXC_BAD_ACCESS. Я думал, что мне не нужно сохранять объекты, если они мне не нужны после выхода из метода, но я хочу проверить это еще раз. В следующем, мне нужно сохранить «tData»?

-(void)myMethod:(UITouch*)touch{
    TouchData *tData = (TouchData *)CFDictionaryGetValue(datasByUITouch, touch);
    [tData doSomething];
}

Ответы [ 3 ]

0 голосов
/ 23 марта 2010

Я думаю, в соответствии с Правилами, то, что вы делаете там, не требует от вас сохранения объекта tData в этой области. Вы не делаете init , alloc , new или copy , вместо этого вы используете один из методов TouchData для возврата некоторых данные, это означает, что метод TouchData, к которому вы обращаетесь, отвечает за освобождение объекта.

0 голосов
/ 23 марта 2010

Правильно, нет необходимости сохранять в этом методе.Похоже, что touch был выпущен до того, как был вызван этот метод.

Как был создан CFDictionary?Если он не был создан с инструкциями для сохранения значений, то словарь не будет сохранять связь.В таком случае передайте kCFTypeDictionaryValueCallBacks ( CFValueCallBacks ) в качестве аргумента valueCallBacks CFDictionaryCreate (или CFDictionaryCreateMutable ).

.
0 голосов
/ 23 марта 2010

Является ли возвращаемый объект объектом CoreFoundation?Если это так, см. Это в Apple Docs (http://developer.apple.com/mac/library/documentation/CoreFoundation/Conceptual/CFMemoryMgmt/Concepts/Ownership.html#//apple_ref/doc/uid/20001148-SW1)

. Если вы получаете объект из какой-либо базовой функции, кроме функции создания или копирования, например, функции Get, вы не являетесь владельцемэто и не может быть уверенным в сроке службы объекта. Если вы хотите убедиться, что такой объект не был утилизирован во время его использования, вы должны требовать владения (с помощью функции CFRetain). Затем вы отвечаете за отказ от владения, когда вызакончили с этим.

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