Нужно иметь нулевые предупреждения от компилятора - вы не можете игнорировать их и «подделывать». Вы боретесь с основами, у вас есть опыт других языков программирования?
Есть несколько вещей, которые вы должны знать, чтобы кодировать Objective-c, и вы должны быть знакомы с общими понятиями объектно-ориентированного программирования. Также немного C может быть полезным, поскольку цель-c является расширением C, и это может дать некоторую перспективу относительно того, почему объектная ориентация настолько полезна и стоит усилий.
Если вы уже знаете язык, такой как Python, Java или даже Actionscript, то в значительной степени все концепции одинаковы, а объектно-c действительно не так сложно. Вам просто нужно знать, как эти концепции переходят в цель-c. Например,
Как вы определяете класс? Как вы переопределяете существующий класс? Как выглядит метод инициализатора? Как создать экземпляр класса? и т. д. Есть несколько вещей, кроме этого, но на самом деле не так много - вам нужно их изучить или, по крайней мере, иметь ссылки в начале, чтобы вы не ошибетесь. Если вы не знаете, что они означают, вам нужно это узнать.
«Класс» похож на план расположения части памяти, в случае с NSNumber, который мы надеемся, будет содержать номер. Класс NSNumber знает, насколько большой должна быть память и как ее следует раскладывать. Нам очень мало заботит план, класс - нам нужен фактический кусок памяти, который может содержать номер - экземпляр класса.
В объекте-c, создающем объект, экземпляр данного класса всегда, всегда, всегда, всегда включает в себя - во-первых - требование владения свободным куском памяти с правильным размером, сохраняя адрес этого кусок памяти в переменную, а затем дать объекту возможность сделать свою собственную первоначальную настройку, вызвав ее предпочтительный метод настройки.
Чтобы получить право собственности на память, вы отправляете метод alloc классу.
NSNumber *myNumberVariable = [NSNumber alloc];
Чтобы установить число с начальным значением 10.0 вы отправляете сообщение initWithDouble: к новому экземпляру.
[myNumberVariable initWithDouble:10.0];
Для удобства они могут быть и обычно объединены в одно утверждение.
NSNumber *myNumberVariable = [[NSNumber alloc] initWithDouble:10.0];
Это самый фундаментальный аспект программирования объектива-c. Вы не можете ничего сделать, не понимая этого полностью. Googling init objective-c
возвращает буквально сотни уроков, руководств, чит-листов и помощи.
Если вашему собственному классу требуется инициализация свойства при создании экземпляра, например, ваш arrayOfTouches, вы должны переопределить предпочтительный метод установки родительского класса. Если родительский класс является NSObject, предпочтительным способом установки NSObject является init. Если вы создаете объект в своем методе установки, вы всегда должны иметь метод dealloc. Это будет всегда, всегда, все время выглядеть следующим образом:
- (id)init {
self = [super init];
if(self){
}
return self;
}
- (void)dealloc {
[super dealloc];
}
только имя «Init» будет меняться, в зависимости от имени методы переопределения, - (ID) инициализация становится - (id) nameOfMethodIAmOverriding и [super init] будет [супер имяOfMethodIAmOverriding];
С учетом этого стандартного шаблона для настройки и удаления вы можете добавить в настройку и отключение ваших собственных свойств. В вашем случае даю вам.
- (id)init {
self = [super init];
if(self){
arrayOfTouches = [[NSMutableArray alloc] init];
}
return self;
}
- (void)dealloc {
[arrayOfTouches release];
[super dealloc];
}
Посмотрите, это не значит, что я думаю, что вы Boneheaded вопросы, они толковые вопросы, но если у вас есть 3 книги - ответы почти наверняка на первых страницах каждой книги - может быть, вы собираетесь об обучении это неправильно. Как-то вы не получаете основ. Лучшее, что я могу предложить, это идти медленнее и выполнять упражнения в книге. Или выбрать более простой язык и попытаться освоить его, прежде чем перейти к объективному c.
IIRC, книга Hillegas имеет очень раздел о NSMutable массивах (я помню, потому что я изучал их сам только на прошлой неделе) – KevinDTimm