2012-06-29 7 views
-1

просто хотел спросить, где я определяю начальные свойства класса?Objective-C Где определить начальные свойства класса

С других языков Я использую для определения некоторых стандартных свойств в голове до начала содержимого класса.

Например, пути к файлам. Настройки и т. Д.

Где я заполняю эти начальные свойства значениями в Objective-C?

Thanks

+0

Вы уверены, что хотите «свойства»? – newacct

ответ

0

Публичное свойство должно быть определено в файле .h.

@interface MyClass { 
} 
@property(nonatomic, reatin) NSString *a;//Define as per needs, then synthesise in .m file 

@end 

Для частной собственности вам необходимо определить инлайн категории в ом файл-

@interface MyClass() 

@property(nonatomic, reatin) NSString *b;//Define as per needs, then synthesise in .m file 
@end 

@implementation MyClass 

@synthesize a = _a; 
@synthesize b = _b; 


- (void)viewDidLoad { 
//You can initialise property here or in init method 

self.a = @"Demo1"; 
self.b = @"Demo2"; 
} 

//Now you can have other code for this class. 
@end 
+0

им не обязательно быть публичными. Также могу ли я определить значение там? – mogio

+0

hmmm ... это больше похоже на определение сеттеров и геттеров ... Я хочу создать начальные свойства с уже определенными значениями, и они должны быть частными. – mogio

+0

Обычно это будет константа с установочным значением – mogio

2

Вообще-то это что-то вроде:

MyClass.h:

extern NSString * const staticValue1; 
extern NSString * const staticValue2; 

@interface MyClass : NSObject 
{ 
    NSString *_strval; 
    int _intval; 
    float _fltval; 
} 

@property (retain, nonatomic, readwrite) NSString *strval; 
@property (assign, nonatomic, readwrite) int intval; 
@property (assign, nonatomic, readwrite) float fltval; 

@end 

MyClass.m :

NSString * const staticValue1 = @"Something"; 
NSString * const staticValue2 = @"Something else"; 

@interface MyClass 

@synthesize strval = _strval; 
@synthesize intval = _intval; 
@synthesize fltval = _fltval; 

- (id)init 
{ 
    self = [super init]; 
    if (self != nil) 
    { 
     [self setStrval:[NSString stringWithFormat:@"This is a %@", @"string"]]; 
     [self setIntval:10]; 
     [self setFltval:123.45f]; 
    } 
    return self; 
} 

- (void)dealloc 
{ 
    [self setStrval:nil]; 
    [super dealloc]; 
} 

@end 

Это демонстрирует использование синтезированных свойств, которые используются здесь для управления памятью переменной экземпляра _strval, которая требует сохранения/освобождения во избежание утечек памяти. Обратите внимание, что [self setStrval] инициализируется автореализованным объектом (от [NSString stringWithFormat) и будет сохранен методом сеттера. В качестве альтернативы эти методы могут быть вызваны, используя следующий синтаксис, если вы предпочитаете:

self.strval = [NSString stringWithFormat:@"This is a %@", @"string"]; 
self.intval = 10; 
self.fltval = 123.45f; 
+0

Таким образом, это означает, что даже старые добрые VO (объекты Value), которые иногда просто используются для share predefined values ​​должен получить вызов init, чтобы сделать доступные значения – mogio

+0

@mogio: Зависит, если это значение известно во время компиляции, тогда вы можете просто использовать литерал (например, '@" My String "'). – trojanfoe

+0

Вы можете быть более конкретным с этим. Где я могу создать эту ценность? в главном файле? – mogio

1

Может быть, некоторые из того, что вы после этого могут быть реализованы с помощью методов класса.

Методы класса кодируются с помощью + (вместо методов экземпляра '-) и не могут ссылаться на переменные экземпляра, поскольку они не связаны с каким-либо конкретным экземпляром класса.

Это метод класса, чтобы вернуть строку по умолчанию:

+ (NSString *)myDefaultString 
{ 
    return @"Some default value"; 
} 

Вы называете это просто назвав его с именем класса на месте получателя. Представьте, что вы определили метод в классе под названием MyClass, то вы называете это так:

NSString *str = [MyClass myDefaultString]; 

Вы заметите, что нет alloc/init вызовов в этом.

+0

Спасибо Monolo. Есть много способов. Я просто понимаю, что было бы лучше просто программировать по-другому, вместо того чтобы пытаться перенести другие способы программирования в цель-c. Мне нравится, как константы и свойства существуют в голове класса, так как он дает хороший обзор о настройках констант и т. Д. Я обычно это делаю в Java, PHP или AS3. Я должен перестать думать на других языках и просто быть более объективным. C :) – mogio

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