我对 Objective-C 很陌生。我知道 C 和 C++,但 Objective-C 有相当的学习曲线。无论如何,是否有一种更短的方法(如果存在,可能是某种 NSNumber 文字)来编写以下内容:
[Tyler setArms:[[[NSNumber alloc] autorelease] initWithInt:1]];
我对 Objective-C 很陌生。我知道 C 和 C++,但 Objective-C 有相当的学习曲线。无论如何,是否有一种更短的方法(如果存在,可能是某种 NSNumber 文字)来编写以下内容:
[Tyler setArms:[[[NSNumber alloc] autorelease] initWithInt:1]];
从Clang v3.1开始,您现在可以使用 Objective-C 文字。
NSNumber *fortyTwo = @42; // equivalent to [NSNumber numberWithInt:42]
NSNumber *fortyTwoUnsigned = @42U; // equivalent to [NSNumber numberWithUnsignedInt:42U]
NSNumber *fortyTwoLong = @42L; // equivalent to [NSNumber numberWithLong:42L]
NSNumber *fortyTwoLongLong = @42LL; // equivalent to [NSNumber numberWithLongLong:42LL]
所以,回答你的具体问题:
[Tyler setArms:[[[NSNumber alloc] autorelease] initWithInt:1]];
现在可以写成:
[Tyler setArms:@1];
数组和字典也有文字,但它们超出了这个问题的范围。
要利用 Xcode 中的文字,您至少需要 4.4 版(在撰写本文时,这只是一个预览版)。
注意:LLVM 是一个开源项目,因此这些都不受 Apple 的 NDA 约束。
是的,只需使用许多辅助函数之一,例如numberWithInt:
:
[Tyler setArms:[NSNumber numberWithInt:1]];
表达式[NSNumber numberWithInt:1]
等价于[[[NSNumber alloc] initWithInt:1] autorelease]
,即等价于[[[NSNumber alloc] autorelease] initWithInt:1]
。后一种表达方式极为少见。
您不必分配和初始化,NSNumber
提供了一种方便的方法来做到这一点:
[Tyler setArms:[NSNumber numberWithInt:1]];
在 Xcode 4.4 中,现在有 NSNumber 字面量:
// integral literals.
NSNumber *fortyTwo = @42; // equivalent to [NSNumber numberWithInt:42]
NSNumber *fortyTwoUnsigned = @42U; // equivalent to [NSNumber numberWithUnsignedInt:42U]
NSNumber *fortyTwoLong = @42L; // equivalent to [NSNumber numberWithLong:42L]
NSNumber *fortyTwoLongLong = @42LL; // equivalent to [NSNumber numberWithLongLong:42LL]
// floating point literals.
NSNumber *piFloat = @3.141592654F; // equivalent to [NSNumber numberWithFloat:3.141592654F]
NSNumber *piDouble = @3.1415926535; // equivalent to [NSNumber numberWithDouble:3.1415926535]
// BOOL literals.
NSNumber *yesNumber = @YES; // equivalent to [NSNumber numberWithBool:YES]
NSNumber *noNumber = @NO; // equivalent to [NSNumber numberWithBool:NO]
到目前为止,我看到的最好的文档在llvm 手册页中。
除了前面的回答外,还有两件事都是正确的:
首先,如果您遵循 Cocoa 命名约定,我们会更容易提供帮助:变量,包括对象指针,应该以小写字母开头。所以,“泰勒”而不是“泰勒”。类和类型以大写字母开头。
其次,您永远不会在初始化对象之前自动释放它。总是先分配,然后初始化,然后做任何你需要做的事情,包括释放或自动释放。