Фактическая небольшая разница между
[self getData];
И
[self performSelector:@selector(getData)];
Единственная разница заключается в том, что когда вы вызываете [self getData], компилятор может определить, что вы хотите отправитьgetData сообщение для объекта класса [self class]
.И если он не может найти прототипы методов, которые были объявлены ранее, появится предупреждение.
Первая и вторая строки будут переведены в
objc_msgsend(self, _cmd)
performSelector:
isдействительно классная вещь, когда вы хотите что-то сделать во время выполнения (например, вы определяете во время выполнения, какое именно сообщение вы хотите отправить объекту).Или вот пример из «реальной жизни»: UIButton имеет метод
- (void)addTarget:(id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents
Таким образом, он хранит действие где-то во внутренних органах, а когда есть соответствующее управляющее событие, он вызывает:
[target performSelector: action];
NSOperation это просто хороший способ обернуть вашу работу с потоками.А NSThread - это просто оболочка для pthreads.
Таким образом, производительность вашего приложения не зависит от того, как вы используете потоки, однако это гораздо проще сделать с помощью NSOperation, а не pthreads.