快速的问题是有可能将NSInteger转换为NSNumber对象? 我需要将UIImageView对象的标记转换为NSNumber对象,因为我需要将它作为parameter passing给函数。
基本上我在NSInteger中存储数组的索引。 我现在需要它作为一个NSIndexpath,我努力看到并find一种方法来将我的NSInteger转换为NSIndexpath,以便我可以重用它。
int , NSInteger和NSUInteger在Objective-C中的主要区别是什么? 哪一个更适合在应用程序中使用,为什么?
tl; dr版本 当枚举常量的数据types如此声明一个枚举时,如何保证是NSUInteger而不是unsigned int: enum { NSNullCellType = 0, NSTextCellType = 1, NSImageCellType = 2 }; typedef NSUInteger NSCellType; NSUInteger的typedef似乎没有以任何方式绑定到枚举声明。 完整版 我正在通过苹果的64位cocoa过渡指南阅读一些枚举值的指导,我拿出一个问题。 下面是枚举常量部分(冗长)的引用,重点是我的: 枚举(enum)常量的一个问题是它们的数据types经常是不确定的。 换句话说,枚举常量不是可预测的unsigned int。 使用传统构造的枚举,编译器实际上根据它find的内容设置基础types。 基础types可以是(signed)int或甚至long。 以下面的例子: type enum { MyFlagError = -1, MyFlagLow = 0, MyFlagMiddle = 1, MyFlagHigh = 2 } MyFlagType; 编译器查看这个声明,并find一个赋值给一个成员常量的负值,声明枚举int的基本types。 如果成员的值的范围不适合int或unsigned int,那么基types默默地变成64位(长)。 定义为枚举的数量的基types因此可以静默地改变大小以符合枚举中的值。 无论您是在编译32位还是64位,都可能发生这种情况。 不用说,这种情况给二进制兼容性带来了障碍。 为了解决这个问题,苹果决定在Cocoa API中更加明确枚举types。 现在头文件不是按照枚举来声明参数,而是单独声明枚举的types,这个枚举的大小可以被指定。 […]
我在iTunes U上试图从斯坦福大学的iPhone课程,我对指针有些困惑。 在第一个任务中,我试着做这样的事情 NSString *processName = [[NSProcessInfo processInfo] processName]; NSInteger *processID = [[NSProcessInfo processInfo] processIdentifier]; 哪一个产生了一个错误,经过盲目的调味,我发现这是NSInteger系列中的*导致的问题。 所以我显然不明白发生了什么事情。 我会解释我认为它是如何工作的,也许有人会善意指出这个缺陷。 与网站开发不同的是,我现在需要担心内存,而不是在Web开发中。 所以当我创build一个variables的时候,它被分配了一些内存(RAM我认为)。 我不是传递variables,而是传递一个指向这个位的指针。 指针是通过在variables名前加*来声明的。 假设我是对的,那么为什么我不需要为NSInteger做这件事呢?
使用64位版本的iOS,我们不能再使用%d和%u来格式化NSInteger和NSUInteger 。 因为对于64位,这些是typedef'd long和unsigned long而不是int和unsigned int 。 所以如果你尝试用%d格式化NSInteger,Xcode会抛出警告。 Xcode对我们来说很好,并为这两种情况提供了一种替代scheme,它由l前缀格式说明符和longtypes组成。 那么我们的代码基本上是这样的: NSLog(@"%ld", (long)i); NSLog(@"%lu", (unsigned long)u); 如果你问我,这是一个痛苦的眼睛。 几天前,Twitter上有人提到了格式说明符%zd来格式化签名variables和%tu来格式化32和64位平台上的无符号variables。 NSLog(@"%zd", i); NSLog(@"%tu", u); 这似乎工作。 而我更喜欢types化。 但我真的不知道为什么这些工作。 现在这两个对我来说基本上都是神奇的价值。 我做了一些研究,发现z前缀表示以下格式说明符与size_t具有相同的大小。 但是我完全不知道前缀t是什么意思。 所以我有两个问题: %zd和%tu究竟是什么意思? 是否可以安全地使用%zd和%tu而不是Applebuild议将types转换为long? 我知道类似的问题和苹果64位转换指南,这些指南都推荐使用%lu (unsigned long)方法。 我要求一个替代types铸造。
NSNumber和NSInteger有什么区别? 还有更多我应该知道的原始图像吗? 有浮标吗?
我想将string data转换为NSInteger 。
例如,当像这样将一个value消息传递给一个NSInteger实例时 [a value]它会导致一个EXC_BAD_ACCESS。 那么如何将一个NSInteger转换为int ? 如果相关的话,只使用小于32的数字。
NSInteger在32位平台上是32位,在64位平台上是64位。 是否有NSLog说明符总是匹配的NSInteger的大小? build立 Xcode 3.2.5 llvm 1.6编译器(这很重要; gcc不这样做) GCC_WARN_TYPECHECK_CALLS_TO_PRINTF开启 这使我在这里感到悲伤: #import <Foundation/Foundation.h> int main (int argc, const char * argv[]) { @autoreleasepool { NSInteger i = 0; NSLog(@"%d", i); } return 0; } 对于32位代码,我需要%d指定符。 但是,如果我使用%d说明符,编译64位时会收到警告,提示我使用%ld 。 如果我使用%ld来匹配64位大小,那么在编译32位代码时,我会收到警告,提示我使用了%d 。 我该如何解决这两个警告? 有没有一个说明我可以使用的工作吗? 这也影响[NSString stringWithFormat:]和[[NSString alloc] initWithFormat:] 。