2013-04-21 42 views
0

我是編程新手,所以任何人都可以在這裏請讓我知道如果在Objective-C中以下是有效的。 謝謝。我如何使用id作爲變量值的臨時存儲器

@interface MainViewController : UIViewController 
{ 
    id iTempStore; 
} 

@property (nonatomic, assign) id iTempStore; 

// FirstViewController 

@interface FirstViewController : UIViewController 
{ 
    MainViewController* pParent; 
} 

-(void) SomeFunction 
{ 
    m_pParent = [[[MainViewController]alloc]init]; 

    NSString* pTest = [[[NSString alloc] initWithString:@"Test"]autorelease]; 
    // Is this valid way to store an object ??? 
    [m_pParent setITempStore: pTest]; 

    // Check Value 
    NSString* pValue = [m_pParent iTempStore]; 
    NSLog(@"Value is: %@", pValue);// Value is: Test 

    [m_pParent release]; 
} 
+1

你爲什麼需要該屬性,而不是方法的範圍內只是一個臨時變量? – 2013-04-21 15:21:30

+0

假設該屬性是單例類的一部分,它需要通過下一個推送VC來訪問。將它保存在方法中(SomeFunction)不會讓我分享它。 – newdev1 2013-04-21 15:36:18

+0

'm_pParent = [[[MainViewController] alloc] init];'對我來說看起來不太好... – 2013-04-21 15:58:01

回答

0

ID可以容納任何對象的引用,所以存儲串存在是好的,但因爲你是跟伊娃支持你可能想使用複製或保留,而不是指定爲您的屬性格式存儲類..你會使用副本,如果它是送花兒給人的NSString或具有可變的子類的任何類......但由於ID不能指定爲類型安全的,你要麼做:

@property(copy) id <NSCopying> iTempStore; 

@propery(retain) id iTempStore; 
0

它在技術上確定...但不是很...好

  1. 如果要聲明一個屬性,你做沒有必要需要它作爲實例變量太多。
  2. 不要使用非ARC的東西...... ARC在所有ios設備(不知道第一代)上是否受支持,但至少在所有這一切都很重要。
  3. 如果您知道對象類型,則不需要使用id。當您不確定返回類型時使用id。

你的代碼應該是這個樣子:

@interface MainViewController : UIViewController 

@property (nonatomic, assign) NSString* iTempStore; 

// FirstViewController 

@interface FirstViewController : UIViewController 
{ 
    MainViewController* pParent; 
} 

-(void) SomeFunction 
{ 
    m_pParent = [[MainViewController alloc]init]; 

    NSString* pTest = [[[NSString stringWithString:@"Test"]; 
    [m_pParent setITempStore: pTest]; 

    NSString* pValue = [m_pParent iTempStore]; 
    NSLog(@"Value is: %@", pValue); 


} 
+0

感謝回覆skytz。考慮到我使用的是第一代ios3(必須),並且希望在應用程序的不同階段存儲不同類型的對象,那麼使用id是否可以呢? – newdev1 2013-04-21 16:14:14

+0

@ newdev1再次...如果你真的不知道什麼類型是...是的..沒關係..但如果你這樣做沒有使用身份證的點(我知道這很方便..使用ID爲所有並涵蓋所有可能的類型,但從長遠來看需要更多的內存,難以維護代碼等)。 – skytz 2013-04-21 16:18:22

+0

skytz。謝謝...我需要@property(保留)id iTempStore;像格雷迪建議的? – newdev1 2013-04-21 16:39:57

相關問題