С тех пор, как я начал работать над приложениями для iOS и с целью C, я был озадачен тем, что в разных местах можно объявлять и определять переменные. С одной стороны, у нас есть традиционный подход C, с другой - новые директивы ObjectiveC, которые добавляют объектно-ориентированный подход к этому. Не могли бы вы, ребята, помочь мне понять лучшие практики и ситуации, в которых я хотел бы использовать эти местоположения для своих переменных и, возможно, исправить мое нынешнее понимание?
Вот образец класса (.h и .m):
#import <Foundation/Foundation.h>
// 1) What do I declare here?
@interface SampleClass : NSObject
{
// 2) ivar declarations
// Pretty much never used?
}
// 3) class-specific method / property declarations
@end
и
#import "SampleClass.h"
// 4) what goes here?
@interface SampleClass()
// 5) private interface, can define private methods and properties here
@end
@implementation SampleClass
{
// 6) define ivars
}
// 7) define methods and synthesize properties from both public and private
// interfaces
@end
- Насколько я понимаю, пункты 1 и 4 состоят в том, что это декларации и определения на основе файлов в стиле C, которые не имеют никакого представления о концепции класса и, следовательно, должны использоваться именно так, как они будут использоваться в C. Я видел их ранее использовался для реализации статических синглтонов на основе переменных. Есть ли другие удобные способы использования, которые мне не хватает?
- Мой вывод из работы с iOS заключается в том, что ivars были полностью отменены за пределами директивы @synthesize и, таким образом, могут в основном игнорироваться. Так ли это?
- По поводу 5: зачем мне вообще объявлять методы в частных интерфейсах? Мои методы частного класса отлично компилируются без объявления в интерфейсе. Это в основном для удобства чтения?
Спасибо большое, ребята!