小编Ale*_*dro的帖子

ARC __bridge修饰符揭秘

我的一位朋友最近问我关于在ARC下变得活跃的新桥修改器.他问我是否知道在特定时间使用哪些,以及不同的__bridge修饰符之间的区别是什么.他告诉我,"那么它们是如何工作的,我什么时候使用它们,我如何使用它们,以及它们如何在"引擎盖下"工作?

注意:这应该是一个"分享你的知识"类型的问题,我自己回答了这个问题,但我不确定我是否正确设置了它.

objective-c automatic-ref-counting

31
推荐指数
1
解决办法
6230
查看次数

GCC通过`memory_order_seq_cst`重新排序.这是允许的吗?

使用基本seqlock的简化版本 ,gcc load(memory_order_seq_cst)在编译代码时重新排序原子上的非原子加载-O3.在使用其他优化级别进行编译或使用clang进行编译时(甚至打开O3),不会观察到此重新排序.这种重新排序似乎违反了应该建立的同步关系,我很想知道为什么gcc重新排序这个特定的负载,如果这甚至是标准允许的话.

考虑以下load功能:

auto load()
{
    std::size_t copy;
    std::size_t seq0 = 0, seq1 = 0;
    do
    {
        seq0 = seq_.load();
        copy = value;
        seq1 = seq_.load();
    } while( seq0 & 1 || seq0 != seq1);

    std::cout << "Observed: " << seq0 << '\n';
    return copy;
}
Run Code Online (Sandbox Code Playgroud)

在seqlock程序之后,这个阅读器旋转,直到它能够加载两个实例seq_,它们被定义为a std::atomic<std::size_t>,是偶数(表示编写器当前没有写入)并且相等(表示编写器没有写入value在两个负载之间seq_).此外,因为这些负载被标记为memory_order_seq_cst(作为默认参数),我会想象指令copy = value;将在每次迭代时执行,因为它不能在初始加载时重新排序,也不能在后者下面重新排序.

但是,生成的组件会value在第一次加载之前发出负载,seq_甚至在循环之外执行.这可能导致不正确的同步或撕裂的读取value不会被seqlock算法解决.另外,我注意到这只发生在 sizeof(value) …

c++ multithreading gcc memory-barriers stdatomic

10
推荐指数
2
解决办法
174
查看次数

ARC非常奇怪的内存泄漏

下午好,

我正在我的iOS应用程序上进行一些仪器测试,我即将发布,但我注意到一些非常奇怪的内存泄漏,似乎来自系统库.

当我运行仪器时,我得到了这个泄漏: 在此输入图像描述

从我的角度来看,这是非常奇怪的!我去了这些泄漏的调用树,它们似乎都是深层次的C++系统调用.

在此输入图像描述

令我更加困惑的是,这个项目启用了ARC,我通过分析器运行它并没有出现任何问题.更奇怪的是,这不会发生在模拟器上,也不会发生在我真正的iPad上,但在我的iPhone上会出现这个问题.

当我检查"仅显示Obj-C"和"隐藏系统库"时,调用跟踪消失,这使我相信我的代码不负责泄漏.

为什么会发生这种情况,我该怎么做才能解决这个问题?

多谢你们.

memory-leaks objective-c ios automatic-ref-counting

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

创建Servlet时"HTTP 405"?(doPost和doGet实现)

我有一个名为HelloServlet的servlet ..

    import java.io.*;
    import javax.servlet.*;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    public class HelloServlet extends HttpServlet
    {
public void doGet(ServletRequest request, ServletResponse response)
throws ServletException, IOException
{


        response.setContentType("text/html");
        PrintWriter pw = response.getWriter();
        pw.println("<html>");
        pw.println("<head>");
        pw.println("<title> Hello World </title>");
        pw.println("</head>");
        pw.println("<body>");
        pw.println("<h1> Hello, World!</h1>");
        pw.println("</body>");
        pw.println("</html>");
        pw.close();




}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
    doGet(request, response);
}
    }
Run Code Online (Sandbox Code Playgroud)

我把它编译成一个.class文件,然后把它放在我的tomcat目录下C:/tomcat/webapps/ALTest1/WEB-INF/classes/- 我把servlet映射(我把url-pattern作为/hi)和servlet条目放入C:/tomcat/webapps/ALTest1/WEB-INF/web.xml

一切正常,但当我去浏览器访问它时,http://localhost:8080/ALTest1/hi我收到一条错误消息:

HTTP STATUS 405 - HTTP METHOD …
Run Code Online (Sandbox Code Playgroud)

java servlets

2
推荐指数
1
解决办法
957
查看次数