我只是想知道這種奇怪的行爲。當我聲明在.h文件中,並在viewDidLoad
方法NSString *temp
嘗試打印是NSLog(@"%@,temp")
,它顯示空velue給我,但是當我宣佈這變數前NSLog(@"%@",temp)
我的應用程序越來越崩潰說不好訪問,任何人都可以解釋這一點給我?簡單的Objective-C概念
回答
聲明爲實例變量的變量默認設置爲0,但局部變量不是,即它們通常包含無效的數據/指針。訪問它們時,您會遇到崩潰。
編輯:您可以嘗試使用int值 - 它們不會崩潰但顯示其值。或者轉儲對象的指針值。
你能告訴我爲什麼它已經成爲實例變量通過在.h文件中聲明或在外部功能 – IOSCODER
我*猜*是你把它放入'@interface .... @end'部分,但是你沒有提供你的代碼。 – Eiko
@Anshul這是一個概念,如果你在'.h'中聲明瞭任何變量,它就會成爲默認的iVar.so如果你想了解更多細節知識,你應該看看這個鏈接https://developer.apple.com/library /mac/#documentation/Cocoa/Conceptual/ObjectiveC/Introduction/introObjectiveC.html – Kamarshad
如果您將一個NSString聲明爲伊娃,那麼默認情況下它將具有零值。所以NSLog(@"%@", temp)
將顯示爲空。但局部變量不會得到任何默認初始值,而是包含垃圾值。因此,在這種情況下,NSLog(@"%@", temp)
正嘗試訪問無效地址,因此發生訪問錯誤。你可以在調試器中檢查它。伊娃將顯示零,但本地字符串將顯示垃圾值。
編輯:伊娃意味着類的實例成員變量。您在@interface
區塊聲明這些變量。它們與在任何類和方法之外聲明的全局變量不同。全局變量可以從代碼的任何地方訪問,但實例變量可以在類內部訪問(除非你已經定義了setter/getter)。有關崩潰的事情是,如果您嘗試訪問不屬於您的程序的任何內存,則會崩潰。未初始化的變量包含垃圾值。
NSString *str;
考慮這個未初始化的str
。假設它包含垃圾值0x130154d0
。所以當你寫NSLog(@"%@", str)
它試圖訪問對象0x130154d0
這是無效的程序,並會崩潰。
如果將此變量聲明爲類的實例成員變量(ivar),則編譯器已將其初始化爲nil
。在這種情況下,您將看到null
而不是崩潰。
它發生是因爲ivars根據它們的鍵類型被默認初始化爲0 = nil = NULL。自動。而其他的局部變量需要先初始化。
我想,你是這樣做的。
NSString* myName;
//in this case it'll give the warning VARIABLE "myName" IS UNINITIALIZED WHEN USED HERE.
NSLog(@"%@",myName)
當您將指定nil
或任何其他值不會崩潰。 所以你應該這樣做。
NSString* myName= nil;
NSLog(@"%@",myName);
我希望它能清除你。
- 1. 簡單的VOIP編程概念
- 2. 簡單的Java「新」概念問題
- 3. 如何用C++概念(「概念精簡版」)支持構建gcc?
- 4. sqlite概念到coredata的概念?
- 5. 概念
- 6. 概念
- 7. 概念
- 8. SQL概念訂單評估
- 9. 簡單的面向對象的編程概念
- 10. 編寫一個簡單的基於Web的IDE - 想法/概念?
- 11. 在線程中理解join()的概念的簡單例子
- 12. python中的簡單交換,概念上的混淆
- 13. OAuth2.0的概念
- 14. Threading.Tasks:WaitAll的概念()
- 15. Postfix的概念
- 16. MVC實現概念(概念(ABAP SAP)
- 17. Codeigniter會話概念簡要說明
- 18. 概念上簡單的線性時間後綴樹構造
- 19. .NET的簡單客戶端/服務器概念
- 20. 非常簡單的導軌遷移概念
- 21. 在Android中需要一個簡單的概念幫助
- 22. 瞭解SQL服務器中簡單行壓縮的概念
- 23. 概念我需要學會做一個簡單的搜索框
- 24. 如何編寫簡單的範圍概念?
- 25. 解釋HTML DOM樹>子節點概念簡單
- 26. 多層概念
- 27. Laravel MVC概念
- 28. Xamarin MasterPage概念
- 29. Java ArrayList概念
- 30. Android:ViewHolder概念
請張貼'.h'文件的declration。 – rckoenes
向我們展示一些代碼。 – Martol1ni
@reckoenes ViewController:UIViewController {0} {0} {0} {0} NSString * check; } – IOSCODER