Если вы просто пытаетесь вызвать метод, вы можете использовать стандартный синтаксис:
[self meth2:next_int];
Если вам действительно нужно использовать performSelectorOnMainThread:
, вы можете заключить номер в NSNumber
для вызова. Вы говорите, что не можете этого сделать, потому что вам нужно изменить номер, но вы можете просто вытащить int и изменить это:
[self performSelectorOnMainThread:@selector(meth2:) withObject:[NSNumber numberWithInt:next_int] waitUntilDone:NO];
// ... later ...
- (void)meth2:(NSNumber *)number {
int myInt = [number intValue];
// do stuff with myInt
}
Но, возможно, вы имеете в виду, что хотите получить значение номера в качестве результата вашего звонка на meth2
. Если это то, что вы имеете в виду, тогда вы можете передать двойной указатель, чтобы вы могли получить новый объект обратно:
- (void)meth2:(NSNumber **)number {
int myInt = [*number intValue];
// do stuff with myInt
*number = [NSNumber numberWithInt:myInt];
}
// The caller can now operate like this:
NSNumber *number = [NSNumber numberWithInt:next_int];
[self performSelectorOnMainThread:@selector(meth2:) withObject:&number waitUntilDone:YES];
int returnInt = [*number intValue];
Конечно, это не совсем потокобезопасно, поэтому, если вы работаете с несколькими потоками, я бы посоветовал использовать ключевое слово @synchronized
для доступа к переменным с многопоточным доступом или для настройки атомарных свойств (т.е. свойства не объявлены как nonatomic
).
Кроме того, мет для тебя вреден !! ха-ха