Cocoa 什么是;标准(32/64位英特尔)";作为目标的架构实际上意味着什么?
我有一个添加了一些新功能的应用程序。 这是在调试模式下测试的,但在编译发行版时引入了许多错误 一些检测工作表明,这些都是由在NSView类和CALayer类之间转换点的调用引起的Cocoa 什么是;标准(32/64位英特尔)";作为目标的架构实际上意味着什么?,cocoa,xcode3.2,Cocoa,Xcode3.2,我有一个添加了一些新功能的应用程序。 这是在调试模式下测试的,但在编译发行版时引入了许多错误 一些检测工作表明,这些都是由在NSView类和CALayer类之间转换点的调用引起的 - (NSPoint)convertPoint:(NSPoint)aPoint fromView:(NSView *)aView - (CGPoint)convertPoint:(CGPoint)aPoint toLayer:(CALayer *)layer error: incompatible type for a
- (NSPoint)convertPoint:(NSPoint)aPoint fromView:(NSView *)aView
- (CGPoint)convertPoint:(CGPoint)aPoint toLayer:(CALayer *)layer
error: incompatible type for argument 1 of 'convertPoint:toLayer:'
- (NSPoint)convertPoint:(NSPoint)aPoint fromView:(NSView *)aView
- (CGPoint)convertPoint:(CGPoint)aPoint toLayer:(CALayer *)layer
error: incompatible type for argument 1 of 'convertPoint:toLayer:'
试图纠正这一错误导致将一组错误替换为另一组错误,我在NSPoint中发现了问题:-
在Mac OS X v10.5之前,坐标由浮点值而不是CGFloat值表示。为64位系统构建时,或构建类似于64位的32位系统时,NSPoint的类型定义为CGPoint
我一直在为默认的“标准(32/64位英特尔)”体系结构进行编译,将其更改为“64位英特尔”解决了这个问题。
我可以通过包含NSPoint和CGPoint之间的显式转换来解决这个问题,尽管这很笨拙(并且在64位中是不必要的)
我试图发现“标准(32/64位英特尔)”体系结构实际上意味着什么,但还是一无所获。我唯一能找到的是:-
将为其构建产品的体系结构列表。这通常设置为平台提供的预定义构建设置。如果指定了多个体系结构,则将生成通用二进制文件
翻看应用程序包似乎并没有显示标准(32/64位英特尔)和64位英特尔之间有多大区别
有人能解释一下这一点吗?在目标为10.6或更高版本的应用程序中,尝试生产“标准(32/64位英特尔)”有什么意义吗
一些检测工作表明,这些都是由在NSView类和CALayer类之间转换点的调用引起的
- (NSPoint)convertPoint:(NSPoint)aPoint fromView:(NSView *)aView
- (CGPoint)convertPoint:(CGPoint)aPoint toLayer:(CALayer *)layer
error: incompatible type for argument 1 of 'convertPoint:toLayer:'
- (NSPoint)convertPoint:(NSPoint)aPoint fromView:(NSView *)aView
- (CGPoint)convertPoint:(CGPoint)aPoint toLayer:(CALayer *)layer
error: incompatible type for argument 1 of 'convertPoint:toLayer:'
试图纠正这一错误导致将一组错误替换为另一组错误,我在NSPoint中发现了问题:-
在Mac OS X v10.5之前,坐标由浮点值而不是CGFloat值表示。为64位系统构建时,或构建类似于64位的32位系统时,NSPoint的类型定义为CGPoint
对。当构建32位时,NSPoint
是一个独立的结构,根据C,它与CGPoint
不兼容,尽管它们实际上以相同的格式保存相同的值
“building 32-bit like 64-bit”部分是一个宏,您可以定义它,使它和其他一些东西以与64位构建相同的方式定义。宏的名称是NS_BUILD_32_LIKE_64
;将其定义为1
以启用该功能。我推荐它
我一直在为默认的“标准(32/64位英特尔)”体系结构进行编译,将其更改为“64位英特尔”解决了问题。我可以通过包含NSPoint和CGPoint之间的显式转换来解决这个问题,尽管这很笨拙(并且在64位中是不必要的) 是的。这是另外两个解决方案 我试图发现“标准(32/64位英特尔)”体系结构实际上意味着什么,但还是一无所获。我唯一能找到的是:- 将为其构建产品的体系结构列表。这通常设置为平台提供的预定义构建设置。如果指定了多个体系结构,则将生成通用二进制文件 这是架构(
ARCHS
)设置的一般定义,而不是特定值
翻看应用程序包似乎并没有显示标准(32/64位英特尔)和64位英特尔之间有多大区别
有人能解释一下这一点吗?在目标为10.6或更高版本的应用程序中,尝试生产“标准(32/64位英特尔)”有什么意义吗
64位Mac OS X中的一些变化包括:
- 该语言中出现了一些新特性,例如非脆弱实例变量。这允许您在运行时添加实例变量,更有用的是,在实现文件中隐藏实例变量声明,而不是在头中公开它们
- 几何结构的定义发生了变化。这就是你遇到的。现在,您可以自由地传递
,其中需要NSPoint
,反之亦然,其他结构也是如此CGPoint
- 类似地,以前以
的形式获取或返回大量点的许多方法现在以float
的形式获取或返回它,这可以定义为CGFloat
double
被定义为NSInteger
,而不是unsigned long
,同样地,对于unsigned int
NSInteger