小编Zwo*_*ord的帖子

弹出UIViewController后,MKMapView自动释放不调用dealloc

我在A类中有以下代码:

UIViewController *vc = [self viewControllerForItem:item];
Run Code Online (Sandbox Code Playgroud)

我的app委托中的viewControllerForItem方法返回基于我的项目的UIViewController,即

vc = [[[MyCustomViewController alloc] init] autorelease];

return vc;
Run Code Online (Sandbox Code Playgroud)

然后我按下视图控制器:

[self.navigationController pushViewController:vc animated:YES];
Run Code Online (Sandbox Code Playgroud)

我试图推送的这个VC是一个MKMapView,我在dealloc方法中插入一个日志语句来查看它是否被调用.在我的内存使用中,增长速度非常快.

但是,当我在推送VC后添加以下代码时:

[vc release];
Run Code Online (Sandbox Code Playgroud)

我的MKMapView类调用dealloc方法.

当然,如果MKMapView类是我的app委托返回的唯一类(或者我可以检查VC的类是否是我的MKMapView类),这将是一个简单的解决方案.但是,我想解决这个根本问题.

  1. 如果我在视图控制器上设置autorelease,为什么不调用dealloc?

  2. 即使在该vc上使用autorelease,我怎么可能将[vc release]添加到视图控制器?

谢谢

编辑:

这是一些额外的信息.我的app委托中有viewControllerForItem类.我将自动释放的对象返回到我的其他管理器类中,然后我推送视图控制器.当我返回一个自动释放的对象时,保留计数是否被搞砸了,然后在其他类中推送它?

当我推送VC并调用mkmapview的didDissappear时,这就是backtrace/callstack:

pushVC: (
0   NewHampshire                        0x00254cdf -[CustomViewController navigateToRowId:withLinkBehavior:animated:] + 2111
1   NewHampshire                        0x002534c9 -[CustomViewController webView:shouldStartLoadWithRequest:navigationType:] + 841
2   UIKit                               0x02caf288 -[UIWebView webView:decidePolicyForNavigationAction:request:frame:decisionListener:] + 318
3   UIKit                               0x02cb1854 -[UIWebViewWebViewDelegate webView:decidePolicyForNavigationAction:request:frame:decisionListener:] + 77
4   CoreFoundation                      0x05d0bd1d __invoking___ + 29
5   CoreFoundation                      0x05d0bc2a -[NSInvocation invoke] + 362
6   CoreFoundation                      0x05d0bdaa -[NSInvocation invokeWithTarget:] …
Run Code Online (Sandbox Code Playgroud)

memory-leaks memory-management objective-c uiviewcontroller ios

5
推荐指数
1
解决办法
1596
查看次数

在.NET 4.0中的Task中的PostAsync()导致WebException

以下方法的目标是异步设置和发布从桌面应用程序到Web控制器的http帖子.我认为我们如何设置下面的任务一定存在问题,我相信.NET 4.5中有更好的实践,例如async/await和Task.Run可以解决问题,但升级目前不是选项.有没有更好的方法来处理/写入.NET 4.0,以防止下面描述的问题?

    public void PostWithoutResponse(object objectToPost, string url) {
        Task.Factory.StartNew(() =>
        {
            using (var handler = new HttpClientHandler()) {
                handler.PreAuthenticate = true;
                handler.Credentials = _credentialPool.GetNetworkCredentials(new Uri(url));
                using (var client = new HttpClient(handler)) {
                    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
                    using (var stringContent = new StringContent(JsonConvert.SerializeObject(objectToPost), Encoding.UTF8, "application/json")) {
                        // We weren't able to get this post to work without waiting for result
                        var result = client.PostAsync(url, stringContent).Result;
                    }
                }
            }
        });
    }
Run Code Online (Sandbox Code Playgroud)

该方法有时只能工作2-3次,有时几次,有时它甚至适用于数百个帖子 - 几个批次 - 在失败之前.程序继续,但数据库中不会反映任何其他帖子,最终会抛出异常.(可能是由于超时.)

我们能够观察到这是抛出的异常:

System.AggregateException was unhandled
Message: An …
Run Code Online (Sandbox Code Playgroud)

c# multithreading http .net-4.0 task-parallel-library

5
推荐指数
1
解决办法
1916
查看次数

函数还原sql语句

如何删除/移动/标记电子邮件时,如何像Gmail一样实现对MySQL数据库的撤消更改功能.

到目前为止,我有一个系统日志表,其中包含用户执行的确切sql语句.

例如,我正在尝试转换:

INSERT INTO table (id, column1, column2) VALUES (1,'value1', 'value2')
Run Code Online (Sandbox Code Playgroud)

成:

DELETE FROM table WHERE id=1, column1='value1', column2='value2'
Run Code Online (Sandbox Code Playgroud)

是否有内置函数来执行此操作,如cisco路由器命令,如

(NO|UNDO|REVERT) INSERT INTO table (id, column1, column2) VALUES (1,'value1', 'value2')
Run Code Online (Sandbox Code Playgroud)

也许我的方法是不正确的,我应该保存我的行的当前状态和更改的行,以回到它的原始状态?

就像是:

original_query = INSERT INTO table (id, column1, column2) VALUES (1,'value1', 'value2')

executed_query = INSERT INTO table (id, column1, column2) VALUES (1,'change1', 'change2')
Run Code Online (Sandbox Code Playgroud)

后来变成:

INSERT INTO table (id, column1, column2) VALUES (1,'value1', 'value2') ON DUPLICATE KEY UPDATE
 column1=VALUES(column1), column2=VALUES(column2)
Run Code Online (Sandbox Code Playgroud)

但也许它不适用于新插入的行,或者如果我修改主键可能会导致麻烦,所以我宁愿让它们保持不变.

这是我的日志表:

CREATE TABLE `log` (
 `id` …
Run Code Online (Sandbox Code Playgroud)

php mysql sql database undo

5
推荐指数
1
解决办法
1666
查看次数

在WCF中自定义SOAP Header名称空间前缀

我已经写了一个定制的命名空间和命名空间前缀由WCF生成的SOAP消息在这里.

但是,我找不到在Message类中重写的正确方法,以便自定义消息的SOAP标头.

我想发这个消息:

<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope">
<s:Header>
<h:Protocol xmlns="http://www.xyz.de/Protocol" xmlns:h="http://www.xzy.de/Protocol">
<version>IFD_1.4</version>
</h:Protocol>
</s:Header>
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
</s:Body>
</s:Envelope>
Run Code Online (Sandbox Code Playgroud)

看起来像这样:

<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope">
<s:Header>
<if:Protocol xmlns="http://www.xyz.de/Protocol" xmlns:if="http://www.xzy.de/Protocol">
<version>IFD_1.4</version>
</if:Protocol>
</s:Header>
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
</s:Body>
</s:Envelope>
Run Code Online (Sandbox Code Playgroud)

不同之处在于第一个标题的名称空间是"if"而不是"f".

有没有办法使用自定义MessageFormatter和自定义Message类来做到这一点?

c# wcf messagecontract

5
推荐指数
1
解决办法
2111
查看次数

3D在JQuery幻灯片中使用透视旋转

我打算回答一个标记为JQuery的问题,该问题已经关闭(非主题).我创建了一个小提琴来回答它.它正如我所希望的那样工作,但是旋转的div看起来并不像我想要的那样.

它看起来像>

在此输入图像描述

而不是这个>

在此输入图像描述

我正在使用perspectiverotateY直到现在我已经实现的旋转效果.我只需要CSS帮助.

html css jquery

4
推荐指数
1
解决办法
3025
查看次数

如何使用一个沙盒Python(VM)为每个请求构建Web服务

作为使scikit-image示例库交互的努力的一部分,我想构建一个Web服务,它接收Python代码片段,执行它,并为我提供生成的输出图像.

为了安全起见,启动的Python实例应该是沙盒和资源控制的,所以我考虑使用LXC容器.

这是解决问题的好方法吗?如果是这样,每个请求启动一个Python VM的推荐方法是什么?

python sandbox virtual-machine lxc

4
推荐指数
1
解决办法
751
查看次数

使用VirtualAllocEX时出错代码487(ERROR_INVALID_ADDRESS)

我正在尝试使用VirtualAllocEx().当我将dwSize(第三个参数)设置为大于约63 MB的数字时,它会导致在我查看时生成错误代码487 GetLastError().但是,它适用于较小的尺寸,如4MB.

这是我的代码的一部分:

VirtualAllocEx(peProcessInformation.hProcess,
               (LPVOID)(INH.OptionalHeader.ImageBase),
               dwImageSize, 
               MEM_RESERVE | MEM_COMMIT,
               PAGE_EXECUTE_READWRITE);
Run Code Online (Sandbox Code Playgroud)

在我使用4MB EXE文件的情况下,LPVOID返回值是0x00400000,但在其他情况下(20MB或更大的文件)它返回0x00000000.

  1. 参数是否有最大值dwSize

  2. 我的问题是否有其他解决方案,例如另一个功能?

winapi memory-management error-code

4
推荐指数
1
解决办法
6282
查看次数

OpenCL 与 Grand Central Dispatch 中的并发编程

随着 OpenCL 2.0 的推出,OpenCL 似乎具备了 Grand Central Dispatch (GCD) 的许多特性,例如 CLang/Apple 风格的块和队列。查看它们各自的功能集,我想知道 OpenCL 是否可以完成 GCD/libdispatch 可以做的所有事情,但是增加了将计算引导到 GPU 和 CPU 的能力——或者 GCD 是否可以提供更多与众不同的功能来自 OpenCL。

具体我的问题是:

  1. GCD 和 OpenCL 的并发特性有什么区别?

  2. 如果一起使用它们有价值(假设 GCD 提供附加功能),C 块是否可以路由到 GCD 队列或 OpenCL 队列?如果以 CPU 为目标,是否有理由通过 OpenCL 与直接运行

  3. OpenCL 2.0 是否提供 GCD 风格的负载平衡,可以填充跨越 CPU 和 GPU 的线程?

concurrency opencl libdispatch grand-central-dispatch objective-c-blocks

4
推荐指数
1
解决办法
1854
查看次数

Wkhtmltopdf 表水平溢出自动分页

我正在使用 Wicked PDF,它通过 wkhtmltopdf-binary gem 使用 Wkhtmltopdf 0.9.9.1。我有一个如下所述的表格(简化)

<div id="listing">
     <table>
        <tr>
            <td></td>
            <td></td>
            <td></td>
            <td></td>
        </tr>
     </table>
</div>
Run Code Online (Sandbox Code Playgroud)

和样式如下所述(简化)

 <style>
    #listing table tr td {
        width:200mm !important
    }
    #listing {
        width:210mm;
        height:297mm;
        page-break-inside:auto;
    }
  </style>
Run Code Online (Sandbox Code Playgroud)

由于有 4 个单元格,每个单元格宽度为 200 毫米,因此表格应溢出到容器的右侧(容器的宽度为 A4 标准宽度 = 210 毫米)

为什么表格永远不会分成两页?我已经关注了一些与之相关的链接,但仍然没有取得好的进展。难道Wkhtmltopdf不支持水平溢出分页吗?我真的很感谢你的一些指点。

补充信息:

整个东西只是缩小以适应表格(自动缩放)。当我添加规则“overflow:hidden”时,表格会被截断,而不会继续到下一页。

预期的行为是:

  1. 当表格垂直溢出时,表格将在下一页继续。
  2. 当表格水平溢出时,表格将在下一页继续。
  3. 当表格在两个方向上溢出时,表格将在下一页上继续。哪一个先出现(溢出的右侧或底部)并不重要,只要两个额外的内容都会出现在后续页面中即可。

如果 Wkhtmltopdf 不是正确的工具,我很高兴知道一些解决方法(如果有)或知道最好的工具。谢谢。

css ruby-on-rails page-break wkhtmltopdf wicked-pdf

4
推荐指数
1
解决办法
5582
查看次数

使用 JComponents 时命令模式的用处

所以,我正在使用 Swing 库开发一个程序,我显然有按钮和菜单项。其中一些应该做同样的事情,我认为使用命令模式应该是这样做的方式,例如我有一个“保存”按钮和一个“保存”菜单项,他们必须实现相同的保存算法. 命令模式似乎没问题,但我不知道谁是接收者。难道一个命令不应该在一个实现某种“接收器接口”的对象上工作,这样你就可以在不同的接收器上使用不同的命令来任意耦合它们吗?看起来我的模式实现中没有“接收器”。我的另一个疑问是是否应该将命令实现为单例,

谢谢你。

swing design-patterns jbutton command-pattern jmenuitem

4
推荐指数
1
解决办法
867
查看次数