小编Ric*_*ney的帖子

为什么这个简单的NSWindow创建代码会在ARC下关闭时触发自动释放池崩溃?

我遇到了关机时自动释放池崩溃的问题,我已经减少到下面的小测试用例,只是创建一个窗口然后关闭它.如果崩溃,崩溃就会消失-fobjc-arc旗帜被拿走,.在OS X 10.8.2,Clang 4.1(421.11.66)上运行.我希望有更深入了解ARC的人可以告诉我这里发生了什么 - 在节目上运行zombie对象,它是NSWindow对象被释放太多次,或者保留不够,但是我以为ARC是为了照顾这一切?

堆栈跟踪是:

0   libobjc.A.dylib                 0x00007fff8fad4f5e objc_release + 14
1   libobjc.A.dylib                 0x00007fff8fad4230 (anonymous namespace)::AutoreleasePoolPage::pop(void*) + 464
2   com.apple.CoreFoundation        0x00007fff99d22342 _CFAutoreleasePoolPop + 34
3   com.apple.Foundation            0x00007fff936e84fa -[NSAutoreleasePool drain] + 154
4   com.apple.Foundation            0x00007fff936effa0 _NSAppleEventManagerGenericHandler + 125
5   com.apple.AE                    0x00007fff93a5ab48 aeDispatchAppleEvent(AEDesc const*, AEDesc*, unsigned int, unsigned char*) + 307
6   com.apple.AE                    0x00007fff93a5a9a9 dispatchEventAndSendReply(AEDesc const*, AEDesc*) + 37
7   com.apple.AE                    0x00007fff93a5a869 aeProcessAppleEvent + 318
8   com.apple.HIToolbox             0x00007fff8d0c18e9 AEProcessAppleEvent + 100
9   com.apple.AppKit                0x00007fff8e95c916 _DPSNextEvent + 1456
10 …
Run Code Online (Sandbox Code Playgroud)

crash macos objective-c clang automatic-ref-counting

10
推荐指数
1
解决办法
2414
查看次数

在OS X 10.8中不推荐使用FSPathMakeRef和FSRefMakePath,有哪些替代方案?

我注意到了这一点FSPathMakeRef(),FSRefMakePath()现在已经在OS X 10.8中弃用了.

我有一些代码使用它们来查找路径的规范案例,例如,如果传递"/ USeRs"它将返回"/ Users".

为什么不推荐使用这些和其他相关函数,现在应该使用哪些非弃用API来提供等效功能?

macos deprecated osx-mountain-lion

8
推荐指数
1
解决办法
5280
查看次数

内置预处理器令牌来检测iPhone平台

是否有一个预处理器令牌可用于在构建时检测任何iPhone设备或模拟器?我目前正在使用:

#ifdef __IPHONE_OS_VERSION_MIN_REQUIRED
    // This is an iPhone build
#endif
Run Code Online (Sandbox Code Playgroud)

这是推荐的方法还是有更好的方法?我更喜欢内置宏,即由编译器定义,而不是我必须包含的SDK头文件.

我现在并不关心区分iPhone OS版本,但是如果有一个Apple文档页面详细说明了所有相关的宏,当它们被定义和未定义时,我会很感激它的链接,因为我的搜索已经来了到目前为止.

谢谢!

iphone preprocessor

6
推荐指数
2
解决办法
5448
查看次数

将深度纹理样本转换为距离

我目前正在使用以下GLSL代码从场着色器的后处理深度中的深度纹理读取:

vec4 depthSample = texture2D(sDepthTexture, tcScreen);
float depth = depthSample.x * 255.0 / 256.0 +
              depthSample.y * 255.0 / 65536.0 +
              depthSample.z * 255.0 / 16777216.0;
Run Code Online (Sandbox Code Playgroud)

然后根据近平面和远平面的距离将深度值转换为视图空间距离:

float zDistance = (zNear * zFar) / (zFar - depth * (zFar - zNear));
Run Code Online (Sandbox Code Playgroud)

这一切似乎都工作得很好,但是我很想知道如何仅基于当前的投影矩阵来进行上述计算,而无需使用单独的zNearzFar值。

我最初的尝试涉及乘以(vec4(tcscreen.x, tcScreen.y, depth, 1.0) * 2.0 - 1.0)投影矩阵的逆,将结果除以w,然后将结果z值作为距离,但这似乎没有用。这里正确的方法是什么?

另外,当使用斜截头截头裁剪将近平面移到选定的裁剪平面上时,每个像素的近平面距离现在是否可能不同?如果是的话,这是否意味着任何计算与深度纹理的距离的着色器都需要了解这种情况,而不需要假定恒定的近平面距离?

谢谢!

opengl math 3d shader

6
推荐指数
1
解决办法
4693
查看次数

链接到GameKit和StoreKit框架时,Mac OS X上的运行时动态链接器警告

使用Mac OS X 10.8.2和Xcode 4.5.2如果您创建一个新的Mac OS X Cocoa应用程序然后添加指向GameKit和StoreKit框架的链接,您会在应用程序启动时收到以下警告:

objc[64970]: Class CKClientDispatch is implemented in both
/System/Library/PrivateFrameworks/CommerceKit.framework/Versions/A/CommerceKit
and
/System/Library/Frameworks/StoreKit.framework/Versions/A/StoreKit.
One of the two will be used. Which one is undefined.
Run Code Online (Sandbox Code Playgroud)

任何人都知道为什么会发生这种情况,或者如何在不烦扰动态链接器的情况下链接到这两个框架?

macos linker warnings storekit gamekit

5
推荐指数
0
解决办法
379
查看次数

强制包含不导出任何符号的静态库对象文件(GCC/iPhone)

我正在创建一个用于iPhone应用程序的静态库.它包含许多不导出符号的源文件,它们只是实例化一个类的静态实例,然后在其构造函数中运行一些代码,在其他地方使用中央管理器类注册各种事物.当代码构建为标准iPhone应用程序的一部分时,这一切都可以正常工作,但当它被分成静态库时,这些文件不会成为最终的应用程序二进制文件,因此它们包含的私有类实例的构造函数不要跑,这会引起问题.我已经关闭了每个构建选项来处理静态库构建和最终应用程序构建的死剥离等.

我刚刚在Metrowerks编译器上遇到过这个问题,但是在那个实例中,即使代码被构建到没有任何中间库的单个应用程序中,也会发生这种情况.解决方案非常简单:只需__declspec(force_export)在私有类实例上使用,一切都很好.

是否有GCC/iPhone的等价物?我正在使用Xcode 3.1.4和GCC 4.2并针对iPhone OS 3.1.或者有一些方法告诉应用程序链接静态库中的每个目标文件,无论它是否被显式引用?我已经确认使用ar完整的目标文件集进入静态库.

提前致谢.

iphone linker gcc static-libraries ios

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