菜鸟教程小白 发表于 2022-12-11 22:42:39

iphone - iOS5 BAD_EXCESS 仅在设备上


                                            <p><p>我正在运行一个后台线程来从 Web 服务获取数据。</p>

<p>要获得创建 URL 所需的设置,我使用此方法:</p>

<pre><code>+(Settings *)getSettings
{
    Settings *settings = [ init];
    NSString *path = ;
    NSString *settingsPath = ;
    NSFileManager *fileMgr = ;
    if () {
      NSDictionary *settingsDictionary = ;
      settings.username = ;
      settings.module = ;
      settings.websiteUrl = ;

    }else
    {
      settings.username =@&#34;&#34;;
      settings.module =@&#34;&#34;;
      settings.websiteUrl =@&#34;&#34;;
    }
    NSLog(@&#34;Settings = u:%@ m:%@ w:%@&#34;,settings.username,settings.module,settings.websiteUrl);
    return settings;
}
</code></pre>

<p>这在调试器中运行良好,但是当我在设备上运行它时,我在 NSLog 或任何尝试使用带有警告的数据的类上得到 BAD_EXCESS:</p>

<p>警告:尝试使用不在框架中的 block 创建 USE_BLOCK_IN_FRAME 变量。</p>

<p>如果我单步执行代码,这就是代码在设备上可以正常工作。</p>

<p>有什么想法吗?</p>

<p>编辑:
回溯 -</p>

<pre><code>#00x37a97eda in objc_retain ()
#10x37aa4be4 in objc_retainAutoreleasedReturnValue ()
#20x0000f84a in + (self=0x175e4, _cmd=0x11af9) at /Users/Jono/Dropbox/Uni/iOS5/Feedback At Tees/Feedback At Tees/SettingData.m:49
#30x0000fa86 in - (self=0x3509e0, _cmd=0x30fd9f96) at /Users/Jono/Dropbox/Uni/iOS5/Feedback At Tees/Feedback At Tees/DataManager.m:19
#40x00003b46 in __35-_block_invoke_0 (.block_descriptor=0x185f40) at /Users/Jono/Dropbox/Uni/iOS5/Feedback At Tees/Feedback At Tees/MasterViewController.m:70
#50x30b08d54 in _dispatch_call_block_and_release ()
#60x30b0b896 in _dispatch_worker_thread2 ()
#70x37a0e1ce in _pthread_wqthread ()
#80x37a0e0a4 in start_wqthread ()
</code></pre>

<p>我尝试将以下内容添加到设置的 init 方法中,如果我单步执行它是可以的

<pre><code>-(id)init
{
    if ((self=))
    {
      NSString *path = ;
      NSString *settingsPath = ;
      NSFileManager *fileMgr = ;
      if ()
      {
            NSDictionary *settingsDictionary = ;
            self.username = ;
            self.module = ;
            self.websiteUrl = ;
            NSLog(@&#34;Settings = u:%@ m:%@ w:%@&#34;,self.username,self.module,self.websiteUrl);
      }
      else
      {
            self.username =@&#34;&#34;;
            self.module =@&#34;&#34;;
            self.websiteUrl =@&#34;&#34;;
      }
    }
    NSLog(@&#34;Settings = u:%@ m:%@ w:%@&#34;,self.username,self.module,self.websiteUrl);
    return self;
}
</code></pre>

<p>截图:
<a href="http://postimage.org/image/4vw6uq7pp/" rel="noreferrer noopener nofollow">http://postimage.org/image/4vw6uq7pp/</a> </p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>首先,方法应该是 <code>retrieveSettings</code> 或 <code>downloadSettings</code> 或者只是 <code>settings</code>,而不是 <code>getSettings</code> <code>get</code> 作为前缀对于方法的论证(通过引用传递)具有非常特殊的含义。</p>

<p>其次,该代码<strike>并没有明显的问题(除了<code>settings</code>的泄漏,但这不会导致这种崩溃)</strike>。 (我看到 ARC 已启用)。</p>

<p>最后,如果您<em>发生了崩溃</em>,那么<strong>发布回溯</strong>。您看到的错误消息(“USE_BLOCK_IN_FRAME”)表明您发布的代码与崩溃无关。</p>

<hr/>

<p>奇怪的崩溃,那个。好的——警告来自调试器,与实际错误没有任何关系。</p>

<p>范围边界通常是编译器发出 <code>release</code> 和/或耗尽自动释放池的位置。</p>

<p>这会引出下一个问题;怎么样</p>

<blockquote>
<p>This is the code works fine on the device if I step through the code.</p>
</blockquote>

<p>好的——所以,当你全速运行时它不起作用,而在逐步运行时它起作用。闻起来像并发崩溃。你能发布实际崩溃的截图吗? IE。您确定特定的回溯是崩溃的回溯,而不是崩溃时调试器发生的位置吗?</p>

<p>(是的,稍微抓紧了救命稻草——根据所显示的证据,这次崩溃没有意义。我喜欢谜题。)</p>

<hr/>

<p>好的——现在我们已经到了某个地方。有点。在成功记录相同的东西<em>inside</em> if 的范围后,它会在 if 的范围之外 <em>outside</em> 崩溃。</p>

<p><code>username</code>、<code>module</code> 和 <code>websiteURL</code> 是如何定义的?它们是 <code>strong</code> 还是最恰当的 <code>copy</code> <code>@property</code> 声明?</p></p>
                                   
                                                <p style="font-size: 20px;">关于iphone - iOS5 BAD_EXCESS 仅在设备上,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/10194923/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/10194923/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: iphone - iOS5 BAD_EXCESS 仅在设备上