问题标签 [objective-c-literals]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
objective-c - @"" NSNumber 的字符串类型文字
我喜欢在 Objective C 中使用该@"string"
符号对字符串文字进行速记处理。有没有办法用NSNumber
s 获得类似的行为?我更多地处理数字,[NSNumber numberWithWhatever:]
到处打电话很乏味。即使创建一个宏也可以,但我对如何最好地做到这一点的了解是有限的。
objective-c - Xcode 4.4 发行说明中提到的“Objective-C Literals”的细节是什么?
我正在浏览 Xcode 4.4 的发行说明并注意到这一点:
LLVM 4.0 编译器
Xcode 现在包含 Apple LLVM 编译器 4.0 版,包括以下新的Objective-C 语言功能: [...]
- Objective-C 文字:为 NSArray、NSDictionary 和 NSNumber 创建文字,与 NSString 的文字相同
我对这个功能很感兴趣。我并不完全清楚文字是如何NSString
工作的,以及如何在NSArray
、NSDictionary
和. 上使用它们NSNumber
。
详情是什么?
objective-c - Objective-C 中是否有一些文字字典或数组语法?
始终可以使用可变参数方法调用创建 NSArray(和 NSDictionaries/NSNumber),例如:
可以在 LLVM 和 Clang 的新改进中使用内联文字创建这些吗?
objective-c - 新的 Clang Objective-C 文字可以重定向到自定义类吗?
尽管 的重载@
开始涉足危险领域,但我喜欢在 Clang 3.1 中添加新的 Objective-C 文字。不幸的是,新文字对我的用处有限。除了代码需要与 AppKit 交互的情况外,我大多放弃使用 Foundation 类,转而使用我自己的自定义框架(出于各种原因;其中大部分是我需要直接控制所使用的内存分配模式按对象)。
我总是可以使用一些运行时技巧将新创建的对象作为我的自定义类传递(这是我已经与字符串对象文字有关的事情,因为只有非 Apple GCC 运行时支持该-fconstantstring=class
标志),但这是一个 hack充其量并抛出我通过替换等效的基础课程获得的所有好处。
与字符串对象字面量不同,Clang 实现的新字面量实际上并不是常量类(内存布局是硬编码的);相反,适当的消息被发送到它们各自的类,以在运行时创建和初始化一个新对象。效果与您自己创建对象没有什么不同。从理论上讲,这意味着新文字所使用的类和调用的方法不是硬编码的。在实践中,我找不到任何方法将它们更改为指向我自己的自定义类和方法(事实上,我很乐意指向自定义类;在运行时将虚拟方法指向实际方法并不困难)。
当我第一次研究这个时,我真的希望找到一组可以用来做我所要求的标志,但由于我没有找到任何标志,我希望有人有一个解决方案。
objective-c - 在 NSArray 上使用下标时编译器错误“找不到预期的方法”
我编写了这个简单的代码来尝试NSArray
s 的新 Objective-C 文字语法:
第一行工作正常,但下标导致错误:
在“NSArray *”类型的对象上未找到读取数组元素的预期方法
只是想知道我是否做错了什么,或者文字是否还没有完全实现。我正在使用 Apple LLVM 4.0 进行编译并使用 iOS 5 SDK。
这也是错误的屏幕截图。
objective-c - 文字对象语法是否仅适用于 OS X 开发?
新的 Objective-C 文字语法添加(例如@3.14
)是否仅在为 OS X 而不是 iOS 开发时可用?这就是 Xcode 更新 4.4 所暗示的。如果是这样,为什么?
objective-c - 有没有办法在 Xcode 4.4 中获得简洁的 Objective-C 文字索引功能?
我阅读了有关新的 Objective-C 文字的所有信息,并使用 Xcode 转换了我的旧代码,但索引代码没有改变。我手动更改了它,但它不会编译。我看到一个帖子说我们必须等到 iOS 6,但我现在想要索引!
有什么解决办法吗?
objective-c - 为什么@YES 给出“预期表达式”错误,但@(YES) 编译?
使用 XCode 4.4 的 Convert to Modern Objective C Syntax,我的[NSNumber numberWithBool:YES]
调用被转换为@(YES)
. 我有一些我现在忘记的问题,并自己将它们更改为@YES
,这应该是正确的语法。
但是,这样做会给我错误:
意外的类型名称“BOOL”:预期的表达式
我知道有一个“表达式”语法,但我不明白为什么我不能简单地使用@YES
and @NO
。
为什么@(YES)
编译时不编译@YES
,我能做些什么来解决这个问题?
objective-c - @[obj1, obj2] 创建什么样的对象?
我遇到了以下情况:
它似乎正在创建一个NSArray
,但是这个数组实例是一个自动释放的对象,还是我必须释放它?
objective-c - 将相同的枚举成员装箱会在传递给方法时产生更大的整数
我正在使用 Clang 的原始装箱功能将枚举成员打包到NSNumber
Clang 文档的Boxed Enums 部分对此表示编译器将枚举成员装箱为整数,除非指定了类型。
有趣的是,根据我将枚举成员传递给方法的方式,我得到不同大小的整数。我已经能够将案例隔离到以下代码
控制台输出是
A 的 CF 编号类型:3;乙:4
(第一个是kCFNumberSInt32Type
,第二个是kCFNumberSInt64Type
)
如果我将声明更改为,typedef enum _MyEnum : int
我看到两者的结果相同:kCFNumberSInt32Type
.
为什么两种装箱方法的整数大小不同?