Метод класса
Метод класса является методом, воздействующим на объекты класса, а не экземпляры класса. В Objective C метод класса обозначен плюс (+) знак в начале объявления метода и реализации:
+ (void)classMethod; |
Для отправки сообщения в класс Вы помещаете имя класса как получатель в выражении сообщения:
[MyClass classMethod]; |
Подклассы
Можно отправить сообщения класса в подклассы класса, объявившего метод. Например, NSArray объявляет метод класса array это возвращает новый экземпляр объекта массива. Можно также использовать метод с NSMutableArray, который является подклассом NSArray:
NSMutableArray *aMutableArray = [NSMutableArray array]; |
В этом случае новый объект является экземпляром NSMutableArray, нет NSArray.
Переменные экземпляра
Методы класса не могут относиться непосредственно к переменным экземпляра. Например, учитывая следующее объявление класса:
@interface MyClass : NSObject { |
NSString *title; |
} |
+ (void)classMethod; |
@end |
Вы не можете обратиться к title в реализации classMethod.
сам
В организации метода класса, self относится к самому объекту класса. Вы могли бы реализовать метод фабрики как это:
+ (id)myClass { |
return [[[self alloc] init] autorelease]; |
} |
В этом методе, self относится к классу, в который было отправлено сообщение. Если Вы создали подкласс MyClass:
@interface MySubClass : MyClass { |
} |
@end |
и затем отправленный a myClass сообщение к подклассу:
id instance = [MySubClass myClass]; |
во время выполнения, в организации myClass метод, self относился бы к MySubClass класс (и таким образом, метод возвратил бы экземпляр подкласса).