我完全失去了内存错误。此问题仅happens
上的device
而不是simulator
。它也只发生在设备上第一次加载应用程序时。如果我关闭应用程序并重新启动它,则问题不会自行预设。这是我得到的错误
-[CFString retain]: message sent to deallocated instance 0xfd5a2f0
我已经尝试了一切来试图找出释放的字符串是什么。请帮我弄清楚在设备上运行时发布的对象是什么,而不是模拟器!提前谢谢!
更新: 我仍然没有解决方案,但我已经确认应用程序将在我设置框架的代码行上一致地崩溃并且上面的错误显示。如果我评论这个代码,应用程序将通过这一点,但可能会在其他奇怪的地方崩溃。我甚至无法确定坠机的起源。
CGRect frame = CGRectMake(27, 96, 265.0, 50.0);
someAcct.frame = frame;
我对此感到困惑,因为这不是一个字符串。有什么想法吗?
更新2:此问题与正在同步的NSUser默认值直接相关。这似乎很随意,但这导致了这个问题。任何帮助?
更新3:问题已于一周前解决。这实际上是由于字符串无法访问。一个字符串被传递给一个方法,该方法然后工作并将数据传递给另一个方法,依此类推。直到最后将数据写入用户默认值和文档文件夹中包含的本地plist。突然之间,即使这些地方与字符串无关,应用程序也会在如上所述的非常奇怪的地方崩溃。我很困惑,在玩了很长时间之后,我决定转到.h文件并一次检查每个字符串,确保每个字符串都在.m文件中合成,并且应用了self.stringName整个.m文件。花了一个小时后,我终于找到了应该责备的字符串,问题现在已经解决了。使用self.stringName可以找到内存并避免这些模糊和高度混乱的应用程序崩溃。感谢大家提供的所有建议和提示!
答案 0 :(得分:1)
为了帮助你追踪它,你能尝试将NSLog放在你的didFinishLaunching()方法的开头,在中间某处和在didFinishLaunching()的位置。
然后你也可以在你的应用显示的第一个视图控制器的viewDidLoad()中推送一个NSLog。例如,如果您使用的是标签栏界面,则在第一个标签的根视图控制器中使用NSLog。
您可以使用NSLog(@“步骤1”),NSLog(@“步骤2”),NSLog(@“步骤3”)...来组织输出,以便您知道代码可以达到的位置在它崩溃之前,而不是NSLog(@“我在这里”)。
答案 1 :(得分:0)
问题出在retain
count
。请参阅mememory management并检查您是否遗漏了某些内容。
不要忘记转动on
NSZombieEnabled
。
答案 2 :(得分:0)
一个原因可能是由于iOS
兼容性。检查您的设备和模拟器是否使用相同的iOS
。尝试在与您的设备相同的操作系统版本上运行模拟器并更改相应的release
字符串。