Я читаю книгу Objective-C, и у меня есть вопрос, на который книга, похоже, не отвечает.
Допустим, у меня есть два пользовательских класса.
Первый класс называется ClassA
.Конечно, у него есть файлы .h и .m.Второй класс называется ClassB
.Он также имеет файлы .h и .m.
Где-то в коде у ClassA есть такой метод:
-(IBAction)displaySomeText:(id)sender {
ClassB *myNumber = [[ClassB alloc]init];
NSString *numberString = [myNumber storedNumberAsString];
// storedNumberAsString is just a method that returns a string object that holds
// myVariable.
[textView insertText:numberString];
//textView is a object I created that just displays some text on screen.
[myNumber release];
}
В книге сказано, что ClassB
должен иметь метод:
-(id)init {
[super init]; //I know why this is done, the book explains it well.
myVariable = 42; // I created this variable already in the ClassB .h file
return self;
}
Теперь, когда в Интерфейсном Разработчике я нажимаю подключенные кнопки и т. Д. Это работает, отображается число 42
.
У меня вопрос, почему янеобходимо создать метод -(id)init
для ClassB
, если я могу сделать следующее в методе ClassA
:
-(IBAction)displaySomeText:(id)sender {
ClassB *myNumber = [[ClassB alloc]init];
myNumber.myVariable = 42; //I just do this to skip the -(id)init method.
NSString *numberString = [myNumber storedNumberAsString];
[textView insertText:numberString];
[myNumber release];
}
При этом все равно будет отображаться то же значение: 42
.Я могу изменить это на то, что мне нравится.Так почему бы просто не использовать init
, унаследованный от NSObject
, и просто сделать простой способ myNumber.myVariable = 42
?