Если вы хотите вызвать testMethod из другого метода класса, вам нужно:
+ (void)testMethod {
NSLog(@"Test");
}
Причина в том, что если вы вызываете метод класса, тогда нет экземпляра, поэтому нет ничего, для чего вызывать методы экземпляра. Но, вероятно, вы хотите позвонить:
[[FavoritesManager sharedManager] testMethod];
Что означает «получить общий экземпляр, затем вызвать на нем testMethod
». Думая, как я печатаю, вы также можете добавить:
+ (void)forwardInvocation:(NSInvocation *)anInvocation
{
id sharedManager = [self sharedManager];
if ([sharedManager respondsToSelector:
[anInvocation selector]])
[anInvocation invokeWithTarget:sharedManager];
else
[super forwardInvocation:anInvocation];
}
Что означает Objective-C для пересылки сообщений. Таким образом, если метакласс FavoritesManager
получает сообщение, на которое он не может ответить, он позволяет своему экземпляру общего менеджера попробовать. Это означает, что:
[FavoritesManager testMethod];
Функционально становится эквивалентным (хотя и немного медленнее):
[[FavoritesManager sharedManager] testMethod];
При условии, что вы не реализовали метод класса в дополнение к методу экземпляра. Подробнее о пересылке сообщений вы можете узнать в официальной документации Apple .