Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocoa 什么是;标准(32/64位英特尔)";作为目标的架构实际上意味着什么?_Cocoa_Xcode3.2 - Fatal编程技术网

Cocoa 什么是;标准(32/64位英特尔)";作为目标的架构实际上意味着什么?

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

我有一个添加了一些新功能的应用程序。 这是在调试模式下测试的,但在编译发行版时引入了许多错误

一些检测工作表明,这些都是由在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/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
其中有些东西与32位OSX完全不兼容,比如语言变化;可以编写一个32位的程序

其他破损较软。如上所述,某些定义在64位中更改,但为了兼容,较旧的定义在32位中仍然是默认的,但您可以使用前面提到的宏进行切换

那么,这有什么关系呢

2006年末/2007年初之前推出的Mac机型仅支持32位Intel体系结构(IA32,又称i386)。大约在2007年初,苹果开始推出同样支持64位体系结构(x86-64)的Mac

在64位硬件上运行的Mac OS X(到目前为止)始终可以运行32位软件,但在32位硬件上运行的Mac OS X只能运行32位软件。MacOSX本身就是为这两个目的而构建的,直到Lion;现在,它需要一个64位的Mac

因此,为32位构建的唯一原因是,您希望支持五年前的硬件(例如,如果您有这样的硬件)。如果您希望获得更新的语言功能,并且不介意放弃拥有5年历史的Mac电脑的客户,那么只使用64位,不要回头看

当然,这是假设你没有手写的i3