#objective-c
#objective-c
Вопрос:
При использовании objective-c существует множество различных способов, которыми вы можете наткнуться на что-то, что использовало бы withObject. Хорошим примером является performSelectorOnMainThread.
[self performSelectorOnMainThread:@selector(aSelector) withObject:anObject waitUntilDone:YES];
Это вызывает селектор как селектор с объектом anObject. Я часто сталкиваюсь с селектором, который принимает простой тип данных, такой как int или enum, и я хочу передать это в ‘withObject’. Каков правильный способ сделать это?
Ответ №1:
Для такого рода операций Cocoa действительно нужен класс Objective-C, производный от NSObject . Для передачи простых типов, таких как целое число, bool или значение с плавающей точкой, класс NSNumber может использоваться для инкапсуляции значения в вызове селектора. Это довольно просто с помощью служебных методов, которые класс предоставляет как для создания объекта NSNumber из примитивного типа, так и для извлечения этого примитивного типа обратно из объекта:
- (void)action:(id)sender
{
enum EnumType eVal = /* ... */;
[self performSelectorOnMainThread:@selector(aMethod:) withObject:[NSNumber numberWithInt:(int)eVal] waitUntilDone:YES];
}
- (void)aMethod:(NSNumber)enumValue
{
enum EnumType eVal = (EnumType)[enumValue intValue];
}
Существует также класс NSValue, который может делать то же самое для типов более низкого уровня, таких как указатели или байтовые строки.
Ответ №2:
Вы захотите обернуть это в какой-нибудь объект. Используйте либо пользовательский объект данных, либо, в случае простых примитивов NSNumber
.
Комментарии:
1. Это не столько то, что он захочет , сколько то, что он должен сделать.
2. @Richard Да, ну, это тоже работает. Я видел это где-то в ImageIO. performSelector:@selector (setAllow:) withObject:(id) ДА