2012-03-08 6 views
0

Я пытаюсь объявить переменную uint32, которые могут быть доступны любым способом, в классе ..как объявить переменную UInt32 с доступом глобального класса

поэтому его глобального к методам классов, но не для любого другого класса. ..

Я пытаюсь это сделать, как это в .h

@interface EngineRequests : NSObject { 

    UInt32 dataVersion; 
} 

@property (copy) UInt32 dataVersion; 

но то не работает .. Я получаю ошибку на линии @property и т.д .. мне даже нужно, что или это просто, просто использовать UInt32 вверху.

ответ

1

Вы можете попробовать

@interface EngineRequests : NSObject { 
@protected 
    UInt32 dataVersion; 
} 

@property (assign) UInt32 dataVersion; 
@end 

@implementation EngineRequests 

@synthesize dataVersion; 

// methods can access self.dataVersion 

@end 

Но вы на самом деле не нужна недвижимость, если вы не хотите, чтобы предоставить/контроль доступа извне. Вы можете просто объявить UInt32 dataVersion в интерфейсе класса, а затем указать dataVersion в реализации без self. В любом случае, @protected не позволит внешним классам напрямую обращаться к dataVersion.

Вы прочитали (а) Objective-C Properties?

Initialization

Ваш EngineRequests подкласс NSObject. Таким образом, вы можете (как правило, должны) переопределить метод -(id)initNSObject «с, как, например:

-(id)init { 
    self = [super init]; 
    if (self != nil) { 
     self.dataVersion = 8675309; // omit 'self.' if you have no '@property' 
    } 
    return self; 
} 

Или создать свой собственный -(id)initWithVersion:(UInt32)version;.

+0

Это сработало отлично, скажем, если бы у меня был метод, который собирался инициализировать этот UInt32 var через параметр, как бы я это сделал? Я попытался это ** - (Недействительными) initalizePacketVariables: (UInt32) версия {//...** Однако тот ошибки, вызывающие .. –

+0

Добавлено обновление. Метод, который вы описываете в своем комментарии, тоже будет работать отлично. «Init» - лучшая практика в Cocoa. – QED

+0

хорошо круто .. Я постараюсь и все это выяснить. спасибо за помощь –

0

Вам необходимо объявить переменную только внутри интерфейса, чтобы сделать ее видимой для всех методов классов. Создание getter-setter с помощью @property .... сделает его переменной класса, и оно будет видимым вне класса. вы должны сделать именно это.

@interface EngineRequests: NSObject {

UInt32 dataVersion; 

}

больше ничего.

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