我是Xcode 4.2的新手,我还没有完全掌握ARC的速度.但是,我确实读到@autoreleasepool取代了自动释放池的手动使用,并且在引擎盖下做了一些特殊的魔法来与ARC玩得很好.
然而,当我在Xcode 4.2中启动一个新项目时,特别关闭了ARC选项,我仍然在模板代码中获得了@autoreleasepool语句.
这是什么交易?
我正在浏览Windows 8.1 SDK和UnknownBase.h中的内容
typedef interface IUnknown IUnknown;
Run Code Online (Sandbox Code Playgroud)
我以前从未见过这个interface关键字.请注意,这绝对是一个.h标题,由处理cl.exe.它不是IDL文件,它不会被处理midl.exe.
我在网上找到了这个:http://msdn.microsoft.com/en-us/library/50h7kwtb.aspx
但是__interface不一样interface
有人能在这里提醒我吗?
我在emacs中的java模式想要缩进函数参数,如下所示:
someLongFunctionName(
argumentNumberOne,
argumentNumberTwo,
argumentNumberThree,
argumentNumberFour
);
Run Code Online (Sandbox Code Playgroud)
这里有两个问题.首先,它希望将参数的开头与函数名的结尾对齐.其次,它希望将壁橱paren视为一个参数,从而将其与所有其他参数对齐.我不喜欢这两种行为.
我宁愿它像这样缩进我的代码:
someLongFunctionName(
argumentNumberOne,
argumentNumberTwo,
argumentNumberThree,
argumentNumberFour
);
Run Code Online (Sandbox Code Playgroud)
默认情况下,c-mode做得更好,我想尽可能将行为转移到java模式.
我仍然需要了解emacs缩进引擎是如何工作的,而且目前我还没有真正知道那么多的lisp.这两个学习练习肯定在我的板上,但目前快速复制粘贴解决方案将非常棒.
有谁知道为什么mmap()返回MAP_FAILED而不是NULL?在大多数系统上,似乎MAP_FAILED是(void*) - 1.为什么mmap()不使用NULL代替?我知道地址0x0在技术上是一个有效的内存页面,而(void*) - 1永远不会是一个有效的页面.但我的猜测是mmap()实际上永远不会实际返回页面0x0.例如,在Windows上,VirtualAlloc()在出错时返回NULL.
假设mmap()永远不会返回0x0是否安全?大概是对mmap()的成功调用应该将可用内存返回给调用者.地址0x0永远不可用,因此成功时永远不应返回.这种情况会让使用0x0作为失败的哨兵似乎是明智的,这就是为什么我首先对MAP_FAILED的存在感到困惑.
我刚刚在Microsoft的guiddef.h头文件中找到了这个:
__inline bool operator==(REFGUID guidOne, REFGUID guidOther)
{
return !!IsEqualGUID(guidOne,guidOther);
}
Run Code Online (Sandbox Code Playgroud)
是否有任何意义!!,或者是某些开发人员那天感觉很可爱?
在这里查看JNI文档:http://download.oracle.com/javase/1.5.0/docs/guide/jni/spec/functions.html
具体来说,看一下EnsureLocalCapacity函数的描述中所说的内容:
为了向后兼容,VM分配超出确保容量的本地引用.(作为调试支持,VM可能会向用户发出警告,指出正在创建太多本地引用.在JDK中,程序员可以提供-verbose:jni命令行选项来打开这些消息.)VM调用FatalError if除了确保的容量之外,不能再创建本地引用.
此外,看看PushLocalFrame如何采用"容量"参数.(顺便说一下,它没有提到这是硬限制,还是像EnsureLocalCapacity一样的软限制).
关于本地参考容量的所有这些废话究竟来自哪里?文档说VM会愿意分配超出当前正式容量的引用,那么为什么它不这样做并且保持所有这些容量混乱的API?
为了给C做一个比喻,感觉我被要求预先计划我要做多少次malloc()调用,感觉有点荒谬.
有什么重要的东西,我只是没有在这里看到?
didReceiveMemoryWarning当我的应用程序在iPad模拟器上处于后台状态时,我注意到我的视图控制器没有调用他们的方法.更具体地说,我applicationDidEnterBackground在我的日志中看到调用,然后我点击"模拟内存警告"按钮,然后我注意到一个特殊的缺乏任何didReceiveMemoryWarning呼叫.
但是,当我将应用程序带回前台时,我突然didReceiveMemoryWarning接到呼叫,好像它已经排队了.
我在这里感到困惑的是,如果我的应用程序真的在后台,或者它只是暂停了.有没有办法告诉模拟器?
此外,如果它尚未暂停,而且实际上只是在后台,那么我会觉得愚蠢,我无法处理didReceiveMemoryWarning.因为这意味着只有前台应用程序才能处理内存警告以释放空间,这当然很奇怪,前景应用程序可能只是可能数十个正在运行的应用程序中的一个,如果它们会更有意义都可以释放记忆.
无论如何,主要问题是:为什么我不didReceiveMemoryWarning进入后台状态?而且,我真的被停职了吗?我怎么说?
看看这个.编译器抱怨我有一个整数溢出,但是当我查看C89标准的整数提升规则以及该表达式中的值时,我觉得没有溢出.
rutski@imac:~$ cat test.c
#include <stdio.h>
#include <inttypes.h>
const uint32_t value =
(0x7F-0x00 + 1) * (256 + 256*256 + 256*256*256) +
(0xDF-0xC2 + 1) * (256 + 256*256 + 256*256*256);
int
main(void)
{
printf("value = %"PRIu32"\n", value);
return 0;
}
rutski@imac:~$ gcc -std=c89 -pedantic -Wall -Wextra test.c
test.c:5: warning: integer overflow in expression
test.c:6: warning: integer overflow in expression
test.c:6: warning: overflow in constant expression
rutski@imac:~$ ./a.out
value = 2661195264
rutski@imac:~$
Run Code Online (Sandbox Code Playgroud)
此外,谷歌确认2661195264的答案是该表达式的正确值!(见此链接)
那么,当整数溢出时程序如何产生正确的值呢?更重要的是,该表达式中的整数溢出是如何开始的?
我需要知道如果我选择在OpenGL中绘制我的绘图而不是android.graphics中的android原生2D图形API,那么我将失去多少潜在的安装量.*
Android文档似乎暗示基本上所有手机都支持OpenGL ES API:http://developer.android.com/guide/topics/graphics/opengl.html
OpenGL ES 2.0 is supported by most Android devices
Run Code Online (Sandbox Code Playgroud)
现在,这是否意味着即使是便宜的商品设备也会支持OpenGL ES 2.0?更便宜的手机可能会有软件渲染,还是总是硬件渲染?
我认为文档的"大多数Android设备"的措辞意味着可能确实有一些手机运行android-8,但只是没有OpenGL ES 2.0的硬件.但到底有多少部手机呢?
Mx revert-buffer命令的emacs帮助页面说它被绑定到"su".到底是什么?我知道Mx是Meta-x(通常是alt-x),我知道Cx是Control-x.但是什么是苏?