2009-12-21 5 views
0

목표 -C : int를 선언하고 유지하는 방법은 무엇입니까?

여기에 내 코드가있다 :

@interface Game : Layer // this is from cocos2d 
{ 
    int maxSprites; 
} 

@implementation Game 
-(void)initVariables 
{ 
    maxSprites = 18; 
} 

나중에

 NSLog(@" maxSprites = %d ", maxSprites); 

 maxSprites = 2 

마치 2 살인 것처럼 일하지 않아.

어떻게 가능하겠습니까? =)

APPLE + SHIFT + FmaxSprites 변수를 다른 용도로 사용하지 않습니다.

다른 코드 예제를 살펴 봤는데 종종 getter와 setter를 사용하여 변수를 노출하고 있으며 @property도 사용하고 있습니다. 내가 놓친 게 있니? 나는 Objective-C를 처음 접했을 뿐이다.

편집 : hrmph, 왜 -1 얻을거야?

감사합니다. Watchpoint를 수행하는 방법을 배우려고합니다.

그때까지, 나는 maxSprites에 대해 APPLE + SHIFT + F을 수행했다고 말하고 싶습니다. "Project, Textual, Contains, Ignore Case에서 결과가

Game.h:  int maxSprites; 
Game.m:  maxSprites = 18; 
Game.m:  NSLog(@" maxSprites = %d", maxSprites); 
Game.m:  NSLog(@" maxSprites = %d", maxSprites); 
Game.m:  NSLog(@"maxSprites is at %p", &maxSprites); 
Game.m:  NSLog(@"maxSprites is at %p", &maxSprites); 
Game.m:  NSLog(@" maxSprites = %d", maxSprites); 
Game.m:  NSLog(@" maxSprites = %d", maxSprites); 
Game.m:  NSLog(@"maxSprites is at %p", &maxSprites); 
Game.m:  NSLog(@"maxSprites is at %p", &maxSprites); 

변경된 위치를 감시 점을 사용하여 찾았습니다. 여기에 변경 :

Expression: “*(int *) 67379960” 
New Value: 2 
Old Value: 18 

이 줄에 :

[self checkMatchBarAward:spriteTypeToAdd]; 

이상한? 그 함수는 아무것도하지 않습니다. maxSprites

편집 : - 왜 스스로 가치가 변하는지를 알아보기 위해 새로운 질문을 던질 것입니다. 도움을 주신 여러분, 고마워요 .

새로운 게시물이 올 것입니다. 여기로 가져 가라 : Objective-C: int value changing without cause

+0

같은 방법으로 에러를 생성하는 방법을 볼 수 있습니까? – Chuck

+0

안녕 척, 나는 NSD에게 "대답"을하고 녹색은 그를 표하고 싶다. 다른 스레드에서이 문제를 계속 진행합니다. http://stackoverflow.com/questions/1941686/objective-c-int-value-changing-without-cause – Jeremiah

+0

원래 질문을 만족시켜주기 때문에이 문제를 계속 수행합니다. "어떻게 선언하고 유지합니까? int? " – Jeremiah

답변

6

당신은 int를 유지하지 않습니다. 와치 포인트를 사용하여 변수가 언제 바뀌는 지 확인하십시오.

+0

이 문제가있어서 시계를 볼 수 없음 = ( http://stackoverflow.com/questions/1598444/iphone-xcode-3-1-4-3-1-2-sdk-watchpoints-dont-work – Jeremiah

+0

. 좋아, 그것이 내가 대신 장치의 시뮬레이터를 사용 발견하고 내가 얻을 :. 식 : "* (INT *) 67379960" 새 값 : 2 이전 값 : \t [자기 checkMatchBarAward :이 라인에 18 : spriteTypeToAdd]; odd? – Jeremiah

0

initVariables가 전혀 호출되지 않았습니까? 값은 항상 2입니까? maxSprites라는 동일한 변수를 참조하고 있습니까? 시도 :

NSLog(@"maxSprites is at %p", &maxSprites); 

그것은 어려운 변수의 내용이 단지 변경 있다고 생각합니다.

편집 : 먼저 나는 그것이 스택에서 "쓰레기"가 될 수 있다고 생각하지만, 다음 내가 그는 물론, 목표 - C 객체가 스택, 하지만 힙에 저장되지 깨달았다. 그리고 MacOS X의 malloc 구현은 할당 된 메모리를 0으로 "공백"합니다.

+0

Objective-C에서 주소록 인쇄를 사용 해 주셔서 감사합니다. 나는 C 녀석입니다 .3 간격으로 샘플링했습니다. 결과는 다음과 같습니다. maxSprites = 18 0x8174f8 maxSprites에서 = 18 maxSprites가 0x8174f8 maxSprites = 2 maxSprites 있어요 maxSprites이되어 회라고 0x8174f8 initVariables이다. 나는 그것을 알아 낸 후 끔찍하게 웃을 것입니다. 내 부분에 심각한 코딩 오류가있을 것입니다. =) 이제 watchpoint thang을해야 할 것입니다. – Jeremiah

관련 문제