我只是想知道这种奇怪的行为。当我声明在.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