我是Objective-C的新手。我知道C和C ++,但Objective-C有相当的学习曲线。无论如何,是否有更短的方式(可能通过某种NSNumber文字,如果存在的话)写下以下内容:
[Tyler setArms:[[[NSNumber alloc] autorelease] initWithInt:1]];
答案 0 :(得分:16)
从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是一个开源项目,因此 none 受Apple的NDA约束。
答案 1 :(得分:6)
是的,只需使用许多辅助函数之一,例如numberWithInt:
:
[Tyler setArms:[NSNumber numberWithInt:1]];
表达式[NSNumber numberWithInt:1]
相当于[[[NSNumber alloc] initWithInt:1] autorelease]
,相当于[[[NSNumber alloc] autorelease] initWithInt:1]
。后一种表达非常罕见。
答案 2 :(得分:3)
您不必分配和初始化,NSNumber
提供了一种方便的方法:
[Tyler setArms:[NSNumber numberWithInt:1]];
答案 3 :(得分:3)
在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 man page。
答案 4 :(得分:2)
除了之前的回复之外还有两件事,都是正确的:
首先,如果您遵循Cocoa命名约定,我们将更容易提供帮助:变量(包括对象指针)应以小写字母开头。所以,'泰勒'代替'泰勒'。类和类型以大写字母开头。
其次,在初始化对象之前,您永远不会自动释放对象。总是首先分配,然后是init,然后做你需要做的任何事情,包括释放或自动释放。