2012-03-08 2 views
0

내가 수업 시간에 어떤 방법으로 액세스 할 수있는 UINT32 변수를 선언하려고와 UINT32 변수를 선언합니다. ..어떻게 .. 그래서 그 클래스의 메소드에 세계가 아닌 다른 클래스에</p> <p>을 글로벌 수준의 액세스

난 난 것을 필요 .. 나는 등 라인 @property에 오류가납니다 .. 않는 .H

@interface EngineRequests : NSObject { 

    UInt32 dataVersion; 
} 

@property (copy) UInt32 dataVersion; 

에서 이런 식으로 일을하려고하고 있지만 작동하지 이잖아 또는 맨 위에 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을 참조하면 @protecteddataVersion에 직접 액세스하는 외부 클래스를 방지합니다.

Objective-C Properties을 읽으셨습니까?

초기화

귀하의 EngineRequestsNSObject의 서브 클래스입니다.

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

을 또는 자신의 -(id)initWithVersion:(UInt32)version;를 만들 : 따라서, 당신은 (보통한다) 등처럼 NSObject-(id)init 방법을 대체 할 수 있습니다.

+0

완벽하게 작동했습니다. 매개 변수를 통해 해당 UInt32 var를 초기화 할 방법이 있다면 어떻게해야합니까? 내가 시도이 ** - (무효) initalizePacketVariables : (UINT32) 버전 {//...** 그러나 원인이 오류를 먹으 렴 ... –

+0

추가 업데이 트. 귀하의 의견에 설명하는 방법도 잘 작동합니다. 'init' 작업은 Cocoa의 모범 사례입니다. – QED

+0

괜찮아요. .. 나는이 모든 것을 알아 내려고 노력할 것입니다. 도움을 주셔서 감사합니다 –

0

변수를 모든 클래스 메소드에서 볼 수 있도록 인터페이스 내에서만 선언해야합니다. @property ....를 사용하여 getter-setter를 생성하면 클래스 변수가되며 클래스 외부에서 볼 수 있습니다. 당신은 단지 이것을해야합니다.

@interface의 EngineRequests : NSObject의 {

UInt32 dataVersion; 

}

아무것도 더.