запутаться немного с вопросом о том, как передать блок методу, но без определенных (конкретных) Params.
Это не для меня ясно, что именно вы просите здесь, но это звучит, как вы хотите, чтобы иметь возможность пройти любой блок к способу, который предположительно на более позднем этапе вы отбрасываемой к определенному типу блока так вы можете это назвать. Если это так:
Блок в современных (после конца 2014 года - см. this question and answer для почему эта дата) Объект ARC Objective-C - полностью автоматически управляемый объект. Поэтому для передачи любого блока может использоваться стандартный тип «любой объект» id
.
Например дано:
// a specific block type
typedef id (^SelectBlock)(NSArray *, NSUInteger);
// method which takes a general object and casts to a specific block type
- (void) useBlock:(id)blockObj
{
SelectBlock sb = (SelectBlock)blockObj;
id item = sb(@[@"apple", @"pear", @"plum"], 2);
NSLog(@"Result: %@", item);
}
// method which pass a block as "any object"
- (void) test:(NSUInteger)offset
{
SelectBlock mySelect = ^(NSArray *collection, NSUInteger index)
{
return collection[index-offset];
};
[self useBlock:(id)mySelect];
}
тогда вызов:
[self test:1];
приведет к pear
выводимого.
Передача блока «в общем» таким образом полезна только в том случае, если исходный тип каким-то образом известен, так что id
напечатанное значение может быть возвращено к правильному типу блока для вызова блока.
Не могли бы вы передать указатель-на-пустоту и литые? Видеть. например http://stackoverflow.com/questions/11106224/how-to-cast-blocks-to-and-from-void – matt
@matt - безусловно, бросая указатель на объект, блок, на указатель пустоты не самый лучший выбор в мире ARC ... – CRD
@CRD Я не вижу, что он имеет отношение к ARC. Ответ на вопрос, который я связал, показывает вам, как обращаться с управлением памятью.Pointer-to-void _is_ общий тип в C/Objective-C; существует множество ситуаций, когда мы передаем указатель объекта в виде указателя на пустоту. – matt