문제

저는 Objective-C와 Cocoa를 처음 사용합니다. NSINTEGER와 NSNUMBER는 간단한 정수로 작업 할 때 기본 숫자 유형의 "플랫폼 안전"버전 (및 NSNUMBER의 경우 객체에 싸여 있음)이기 때문에 선호된다는 것을 읽었습니다. 따라서 NSTIMER가 발사 될 때 증가하는 수업에 카운터가 필요합니다. Apple 포럼에서 나는 비슷한 상황에 처한 누군가에게 권장하는 사람들이 헤더에서 nsnumber pointer를 선언하고 숫자와 함께 초기화해야 할 때마다 다음에 할당함으로써 그것을 증가시켜야 할 때마다 그렇게해야 할 때마다. 새로운 개체 (같은 것 counter = [NSNumber numberWithInt:[counter intValue]+1];). 이것은 나에게 과도한 것처럼 보입니다. 내가 필요한 것은 int 카운터 (그리고 btw, 15에 도달 한 후 0으로 다시 재설정하고 있으므로 크기가 문제가되지 않습니다), int 만 사용하면 도망 갈 수 없으며 내 타이머 루프를 반복 할 때마다 새로운 객체?

그렇다면 수업 내내 원시 유형을 이용할 수있는 방법을 어떻게 만들 수 있습니까? 나는 객체 유형으로 인터페이스에서 그것을 선언하고 @property 및 @synthesize를 사용한다는 것을 알고 있습니다. 프리미티브로 작업 할 때 동등한 (존재하는 경우)는 무엇입니까?

도움이 되었습니까?

해결책

간단한 카운터에 NSNUMBER를 사용하면 약간의 킬이 있습니다. 클래스 멤버를 nsinteger로 선언하고 간단히 ++ 또는 +=를 사용하여 업데이트 할 수 있습니다.

예를 들어:

@interface YourViewController : UIViewController  {
NSInteger counter;      
}

@property (nonatomic,assign) NSInteger counter;

@synthesize는 단지 다음과 같습니다.

@synthesize counter

다음과 같이 증가 할 수 있습니다.

self.counter += 1;

또는

counter ++;

나중에 관찰자에게 정보를 얻지 못하도록하므로 바람직하지 않을 수 있습니다.

다른 팁

nsnumber는 숫자의 객체 표현입니다. 객체 포인터 만 보유 할 수 있기 때문에 컬렉션 클래스에 숫자를 저장할 때 사용합니다.

따라서 카운터가 필요한 예에서는 아마도 과잉 일 것입니다.

NSINTEGER는 단순히 32 및 64 비트 프로그램에 안전하도록 타이핑되는 정수이며 Apple은 Apple이 사용하기 위해 권장합니다. int. 그것은 대상이 아닙니다. 이것은 아마도 당신이 카운터에 필요한 것일 것입니다 (실제로 nsuinteger, 그것은 unsigned int) 더 나을 수도 있습니다.

수업 내내 프리미티브를 사용할 수있게하는 방법에 관해서는, 헤더에서 IVAR로 선언하면 어쨌든 수업 전반에 걸쳐 사용할 수 있습니다. @property 그리고 @synthesize KVC/KVO 준수 방식으로 클래스 밖에서 볼 수있는 속성으로 이들을 선언하는 객관적인 C 2.0 방법입니다. 원시 유형은 동일한 것을 사용하는 속성으로 사용할 수 있습니다. @property 그리고 @synthesize 통사론.

나는 사용한다 NSInteger (int가 아니라 더 휴대하기 위해) NSNumber 컬렉션에 추가 해야하는 경우 (예 : NSMutableDictionary 응용 프로그램을 종료 할 때 상태를 저장할 때).

나는 당신의 본능에 동의하고, 간단한 카운터 소리에 오버 킬처럼 들리며 불필요한 수의 메시지 디스패치 호출을 단순히 카운터를 증가시키는 것을 추가합니다. 컬렉션에 저장되거나 물체로 조작 할 필요가없는 카운터의 경우 C 스칼라 유형을 고수하십시오.

스칼라를 클래스의 인스턴스 변수로 선언하려면 헤더 파일로 선언하십시오.

@interface MyClass: NSObject{
  int counter;
}

@end

만약 너라면 하다 nsnumber (예 : nsmanagedObject 속성)를 증가시켜야합니다.이 카테고리가 도움이되었습니다.

@interface NSNumber (Incrementer)
- (NSNumber *)increment;
@end

@implementation NSNumber (Incrementer)
- (NSNumber *)increment {
    return [NSNumber numberWithInt:[self intValue]+1];
}
@end

따라서 증분 문을 단순화 할 수 있습니다.

counter = [counter increment];
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top