Правильный способ определения SEL
, который принимает аргументы, заключается в использовании символа двоеточия (":"
) для каждого аргумента, поэтому в вашем случае селектор будет выглядеть следующим образом:
@selector(loadImagesWithOperation:)
Итак, ваш NSInvocationOperation
объект должен быть инициализирован следующим образом:
NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self
selector:@selector(loadImagesWithOperation:)
object:params];
О, и как примечание, у вас есть утечки памяти при инициализации вашего NSArray
в getImages:
:
NSArray * params = [NSArray arrayWithObjects:
[[NSNumber alloc] initWithInt: bounds.location],
[[NSNumber alloc] initWithInt: bounds.length]];
Это добавляет объекты, которые уже имеют retainCount
из 1
, потому что вы используете +alloc
, поэтому, когда они добавляются в NSArray
, им отправляется сообщение -retain
, увеличивая таким образом retainCount
до 2
.
Когда этот NSArray
освобожден, эти объекты не будут освобождены, потому что их retainCount
будет 1
, а не 0
.
Существует три решения этой проблемы:
- Отправьте сообщение
autorelease
каждому из этих объектов, прежде чем они будут добавлены в NSArray
. - Использование *Метод класса 1037 *
numberWithInt:
для получения автоматически освобожденного объекта NSNumber
. - Создание ссылок на эти
NSNumber
объектов, добавьте их в NSArray
, затем при добавлении отправьте им сообщение -release
.