Цель C [выпуск объекта] - PullRequest
       18

Цель C [выпуск объекта]

2 голосов
/ 22 октября 2010

Я смотрю на чужой код, но кажется, что он RELEASE для объекта VIDEO, но затем продолжает использовать его.

Теперь, исходя из моего понимания языков объектно-ориентированного программирования, после того, как он выпущен, он должен быть освобожден из памяти ...

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

self.video = [[VideoFrameExtractor alloc] initWithVideo:[Utilities bundlePath:@"sophie.mov"]];
[video release];

// set output image size
video.outputWidth = 426;
video.outputHeight = 320;

Ответы [ 2 ]

5 голосов
/ 22 октября 2010

это эквивалентно: self.video = [[[VideoFrameExtractor alloc] initWithVideo:[Utilities bundlePath:@"sophie.mov"]] autorelease];

(при условии, что видео сохраняется самостоятельно)

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

надеюсь, это поможет.

4 голосов
/ 22 октября 2010
self.video = [[VideoFrameExtractor alloc] initWithVideo:[Utilities bundlePath:@"sophie.mov"]];

эта строка на самом деле вызывает -setVideo: метод, в котором вероятно сохраняется видео переменная (если соответствующее свойство объявлено с атрибутом retain). Таким образом, количество сохраняемых видеообъектов становится равным 2, и для компенсации дополнительного сохранения мы освобождаем его. Объект освобождается только тогда, когда его счетчик хранения становится равным 0, поэтому это можно сделать безопасно.

Нам также необходимо выпустить видео где-нибудь в коде (например, в методе dealloc), чтобы убедиться, что видеообъект уничтожается, когда он не нужен во избежание утечки памяти

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