2012-03-28 4 views
2

Просто интересно, есть ли у его хорошей практики программирования много переменных, объявленных в файле .h.Объявление переменных в файле .h

Я пишу свое первое приложение, через которое im учит xcode и obj-c. Это приложение ios имеет только один xib, один .m и один .h файл. Я нахожу свое «я» много раз, когда у меня есть определенная переменная, которую мне нужно использовать в разных методах/местах в файле .m, и я просто заканчиваю тем, что объявляю ее в файле .h, который кажется im, делая переменную global, которая Я не думаю, что это хорошая идея, чтобы их было много.

Является ли это безопасным/нормально иметь много переменных, объявленных в файле .h, или я должен подходить к нему каким-то другим способом?

Благодаря

ответ

2

Это безопасно/нормально иметь много переменных, объявленных в .h файле или я должен подойти к нему каким-либо другим способом?

Это абсолютно нормально, чтобы включить большое количество переменных в .h! Он просто увеличивает время компиляции и увеличивает размер вашего двоичного файла на произвольную сумму. Если это вас беспокоит, просто разделите свою реализацию на несколько категорий.

мне найти себя много раз, когда у меня есть определенный переменный, что мне нужно использовать в различных методах/местах в файле .m и я просто в конечном итоге объявить его в файле .h, который кажется как im, делая переменную global , которую я не считаю хорошей идеей, чтобы иметь много тех.

Переменные, которые доступны за пределами одного метода, всегда должны быть объявлены как iVars и как свойства, если они требуют сильной ссылки или должны быть доступны для внешних классов. Глобальные переменные различны, и вам не нужно об этом беспокоиться.

+0

Вы всегда можете уменьшить количество переменных 'UIView' (и его подклассов), ссылаясь на них, используя' tag's – tipycalFlow

1

Ваш .h-файл является общедоступным интерфейсом вашего класса. Он должен содержать только свойства и методы, о которых должны знать другие классы.

Вы можете объявить ivars и внутренние методы и свойства в продолжении класса в файле .m (это настолько распространено, что теперь он автоматически включается в шаблон для подклассов UIViewController).

Вы также можете объявить ivars в фигурных скобках непосредственно после @implementation.

В iOS5, с ARC, объявленные ivars являются сильными ссылками по умолчанию, поэтому вам не нужно использовать свойства или методы доступа, но этот выбор зависит от остальной части вашего класса. Например, вы можете использовать ленивый экземпляр или выполнять другие задачи или KVO при получении или настройке переменной, и в этом случае вы всегда хотите получить к ней доступ через свойство или метод, и если вы делаете это для , то некоторые ivars , а не другие, он начинает выглядеть немного грязно.

0

В любом случае, у вас есть много переменных, объявленных в интерфейсе в файле .h, когда это необходимо (как это затрагивают другие ответы). Но было бы разумно рассмотреть возможность перемещения переменных экземпляра, которые не должны быть общедоступными в категории в файле .m. Например:

В .h:

#import <Foundation/Foundation.h> 

@interface SomeClass : NSObject { 
    NSDictionary *publicDict; 
    NSArray *privateArray; 
} 

@property (nonatomic, strong) NSDictionary *publicDict; 

-(void)publicMethod:(id)anObj; 

@end 

И в.м файл:

#import "SomeClass.h" 

@interface SomeClass() //Category that denotes private methods 

@property (nonatomic, strong) NSArray *privateArray; 

-(void)privateMethod; 

@end 

@implementation 

@synthesize publicDict; 
@synthesize privateArray; 

-(id)init { 
    //... 
} 

-(void)publicMethod:(id)anObj { 
    //.. 
} 

-(void)privateMethod { 
    //.. 
} 

@end 

Это заставляет компилятор выдавать предупреждение каждый раз, когда какие-либо из частных методов, содержащихся в этой категории доступны внешними классами. Кроме того, это общепринятый способ придерживаться аспекта инкапсуляции в Objective-C.

Смежные вопросы