У меня возникли проблемы с пониманием использования [[self alloc] init]
при написании заводских методов. Я понимаю, что фабричные методы - это удобные методы для создания экземпляров класса, и что они делают alloc
, init
и autorelease
для вас. Я вижу, как это формируется, например, в объявлении свойства NSArray
с заводским методом arrayWithArray:
или array
и т. Д., Чтобы вызвать его. Я, очевидно, вижу, как это отличается от прямого (явного) вызова alloc
и init
.Использование [[self alloc] init] при написании заводских методов
Моя проблема заключается в том, что я не понимаю фабричные методы на более глубоком уровне. Я наткнулся на объяснение в Интернете, который сказал, вместо вызова alloc
и init
в явном виде, метод класса завод может быть использован в основном инкапсулирует что-то вроде этого:
+(instancetype)createWithString:(NSString *)string
{
return [[self alloc] initWithString:string];
}
Но как instancetype
и [self alloc]
эффективно позволяют подклассы использовать метода фабрики класса?
Я не уверен, что вы просите. Означает ли [методы класса, которые создают новые экземпляры] (http://stackoverflow.com/q/5987969) что-нибудь для вас? –
Этот подход не имеет проблем с подклассами, поскольку 'self', если он динамически решен во время выполнения и будет« указывать »на« активный класс ». 'NSArray',' NSNumber', 'NSString' являются специальными случаями, называемыми кластерами классов ([официальный doc] (https://developer.apple.com/library/ios/documentation/General/Conceptual/CocoaEncyclopedia/ClassClusters/ClassClusters.html)) – tkanzakic
@Josh: Да, это действительно полезно. Я просто прочитал эту страницу и нашел ее очень полезной: http://qualitycoding.org/factory-method/ – cheznead