我對Objective-C非常陌生。我知道C和C++,但Objective-C有相當的學習曲線。無論如何,有一個較短的方法(可能通過某種NSNumber的文字,如果這種存在的)編寫如下:NSNumber Literals
[Tyler setArms:[[[NSNumber alloc] autorelease] initWithInt:1]];
我對Objective-C非常陌生。我知道C和C++,但Objective-C有相當的學習曲線。無論如何,有一個較短的方法(可能通過某種NSNumber的文字,如果這種存在的)編寫如下:NSNumber Literals
[Tyler setArms:[[[NSNumber alloc] autorelease] initWithInt:1]];
是的,只是使用的許多輔助功能,如numberWithInt:
之一:
[Tyler setArms:[NSNumber numberWithInt:1]];
表達式[NSNumber numberWithInt:1]
相當於[[[NSNumber alloc] initWithInt:1] autorelease]
,相當於[[[NSNumber alloc] autorelease] initWithInt:1]
。後者的表達非常罕見。
我不知道是否在將對象告知自動釋放之前或之後初始化對象。謝謝。 :) – 2011-03-21 04:25:03
後一個表達式不僅不常見,而且完全不正確!對於那些'-init *'方法返回的東西不是首先分配的東西的類(比如說每個NSString曾經實例化過),它都會完全破壞。 – bbum 2011-03-21 04:49:46
您不必分配和初始化,NSNumber
提供了一個方便的方法來做到這一點:
第一:除了以往的迴應,這兩者都是正確
[Tyler setArms:[NSNumber numberWithInt:1]];
兩件事,如果遵循Cocoa命名約定,我們可以更容易地提供幫助:變量(包括對象指針)應該以小寫字母開頭。所以,'泰勒'而不是'泰勒'。類和類型以大寫字母開頭。
其次,在初始化它之前,你永遠不會自動釋放一個對象。總是先分配,然後是init,然後執行其他任何你需要做的事情,包括釋放或autorelease。
啊,我甚至沒有意識到我使用了大寫字母T.它從來沒有發生過。謝謝。 – 2011-03-21 04:26:35
從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]];
目前可以寫爲:
還有用於數組和字典文字,但它們超出範圍這個問題。
爲了充分利用Xcode中的文字,您至少需要版本4.4(在撰寫本文時,這只是預覽版)。
注:LLVM是一個開源項目,所以這沒有是受到蘋果公司的保密協議。
在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。
我已經看到了使用Xcode 4的手冊頁。4現在用於我的項目,但IDE抱怨@YES不好 - 我檢查了
你好嗎?您的項目針對的是哪個版本的SDK? – drewish 2012-08-03 21:50:11
基本SDK iOS 5.1,Xcode 4.4(4F250),部署目標iOS 5.0。它可能是iOS嗎? – themarketka 2012-08-07 11:29:09
對於那些想知道的人來說,Tyler是我創建的人類的一個實例。 – 2011-03-21 04:19:16