【问题标题】:Error EXC_BAD_ACCESS错误 EXC_BAD_ACCESS
【发布时间】:2010-07-26 10:16:34
【问题描述】:

我是 iPhone 开发新手,遇到 EXC_BAD_ACCESS 错误。

在我的 .h 文件中,我声明:

NSString *myString;

在我的 .m 文件中,我有两种方法:

1.我做时CLLocationManager接口的(void)locationManager:

myString = [NSString stringWithFormat:@"%lf",loc.longitude];
NSLog(@"%@",myString); // it works

2.A (void)sendPosition 方法:

NSLog(@"%@",myString); // EXC_BAD_ACCESS

你能帮帮我吗?

【问题讨论】:

    标签: iphone gps location exc-bad-access cllocationmanager


    【解决方案1】:
    1. 保留你的字符串。

      myString = [[NSString stringWithFormat:@"%lf",loc.longitude] 保留];

    2. 然后在你这个类的dealloc方法中(或者添加它)

      -(void) 解除分配{ [超级释放]; [myString 发布]; }

    假设你已经在你的 .h 文件中声明了 myString ,那应该可以解决它。

    【讨论】:

    • 这是因为 NSString 是自动释放的,如果您希望它挂起,则需要保留它。或者,您可以将其设为保留的属性,而不必调用 retain(请注意,您仍然必须在 dealloc 中释放它)
    • 谢谢,它可以工作,但 myString 的值可能会定期改变。使用保留,值始终相同。
    • 如果您的值可以更改,请使用可变字符串,然后更改值。否则,释放它并在创建新值时再次设置它。说真的,看看我的回答,阅读规则(你需要知道它们),当你遇到这样的问题时,停下来思考一下。通常有一个简单的解决方案。
    • 感谢您的帮助,我是 Objective-c 语言的初学者,它与 php 或 Java 等其他语言非常不同。我不知道所有类型的属性。它效果不佳,但我会听从您的建议,我会单独搜索。再次感谢。
    【解决方案2】:

    您是否将 myString 保留在 locationManager 方法的其他位置?如果没有,你应该,然后在你的 -dealloc 方法中释放它。否则,它可能会消失,就像我怀疑现在正在发生的那样。请阅读rules for memory management

    我建议创建一个属性,在您的类中自动保留该值,然后在创建字符串时使用点符号分配它。同样,在您的 dealloc 方法中释放它。对于这种类型的代码,如今这是惯用的。

    【讨论】:

      猜你喜欢
      • 2012-02-26
      • 2012-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-18
      相关资源
      最近更新 更多