2009-12-21 41 views
0

這裏是我的代碼:Objective-C:你如何聲明和保留int?

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

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

後來,當我把它打印出來,

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

我得到:

maxSprites = 2 

而且需要它的操作是18,崩潰或不工作,就好像現在真的只有2個一樣。

這怎麼可能? =)

APPLE + SHIFT + ˚F揭示變量的任何其他用途。

我已經看過其他的代碼示例,並且經常將這些變量暴露給getter和setter,並且它們也使用了@property。我錯過了什麼嗎?我是Objective-C的新手,所以我可能只是做!編輯: hrmph,爲什麼我得到-1?

謝謝,我會盡力學習如何做一個Watchpoint。

在那之前,我想說,我做了一個APPLE + SHIFT + ˚F爲maxSprites」在項目文本,包含,忽略大小寫並不僅造成:

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); 

2日編輯:

我發現它改變使用觀察點的位置它改變了這裏:

Expression: 「*(int *) 67379960」 
New Value: 2 
Old Value: 18 

在此行中:

[self checkMatchBarAward:spriteTypeToAdd]; 

奇?該功能對沒有任何作用。

編輯: - 我現在要提出一個新的問題,找出價值爲什麼會自行改變。謝謝你們的幫助,很棒的工作。

新職位將採取在這裏: Objective-C: int value changing without cause

+0

我們可以看到該方法(或它的一些縮減版本,仍然會產生相同的錯誤)? – Chuck 2009-12-21 18:07:56

+0

嗨Chuck,我想給NSD「答案」,綠色標誌着他。我在另一個線程繼續這個問題在這裏: http://stackoverflow.com/questions/1941686/objective-c-int-value-changing-without-cause – Jeremiah 2009-12-21 18:13:28

+0

因爲他滿足了原來的問題:「你如何申報和保留一個int?「 – Jeremiah 2009-12-21 18:14:05

回答

6

,因爲它不是一個對象時不保留一個int。使用觀察點並查明變量何時發生變化。

+0

我得到了這個問題,並且看不到=( http://stackoverflow.com/questions/1598444/iphone-xcode-3-1-4-3-1-2-sdk-watchpoints-dont-work – Jeremiah 2009-12-21 17:34:11

+0

OK,找到了我使用的模擬器,而不是設備和獲取:。 表達:「*(INT *)67379960」 新值:2 舊值:18 在這條線: \t [自我checkMatchBarAward: spriteTypeToAdd]; odd? – Jeremiah 2009-12-21 17:54:51

0

你確定initVariables被調用嗎? 值是否總是2? 您是否在引用同一個名爲maxSprites的變量? 嘗試:

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

很難相信,一個變量的內容只是改變。

編輯: 首先我想它可能是從堆棧中的「垃圾」,但後來 我意識到,這,當然,Objective-C的對象沒有存儲在堆棧, 但堆上。和MacOS X malloc實現「空白」分配內存0.

+0

謝謝先生的地址打印,我完全忘記了在Objective-C中使用它,我更像是一個C人,我以3個間隔抽樣,結果如下: maxSprites = 18 maxSprites在0x8174f8 maxSprites = 18個 maxSprites是在0x8174f8 maxSprites = 2個 maxSprites是在0x8174f8 initVariables被調用兩次。 對我來說,這肯定是一個嚴重的編碼錯誤,在我弄清楚後我會大大地笑出來。=) 現在我將不得不做觀察點了。 – Jeremiah 2009-12-21 17:04:56