Другой способ сделать это - создать функцию C, которая возвращает блок.Таким образом, вы можете создать этот блок где угодно:
например
MyComparator.h
#import <Foundation/Foundation.h>
NSComparator CreateObjNameComparer(void);
NSComparator CreateObjPriceComparer(void);
MyComparator.m
#import MyComparator.h
NSComparator CreateObjNameComparer(void) {
NSComparator myComparator = ^(id obj1, id obj2) {
// Your definition here
};
return Block_copy(myComparator);
}
NSComparator CreateObjPriceComparer(void) {
NSComparator myComparator = ^(id obj1, id obj2) {
// Your definition here
};
return Block_copy(myComparator);
}
И затем все, что вам нужно сделать, это использовать, чтобы импортировать заголовок и использовать его как:
NSComparator nameComparator = CreateObjNameComparor();
// Use the block
Block_release(nameComparator);
Сохраняет необходимость проходить весь процесс создания объекта и свойстваroute.
Обратите внимание, что я использую соглашение об именовании Create
, чтобы напомнить мне, что я должен сам выпустить объект, когда я закончу с ним.