我如何使用id作为变量值的临时存储

时间:2013-04-21 15:16:52

标签: iphone objective-c

我是编程新手,所以这里的任何人都可以告诉我以下是否在Objective-C中有效。 感谢。

@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];
}

2 个答案:

答案 0 :(得分:0)

id可以保存对任何对象的引用,因此存储一个字符串就可以了,但是由于你使用iVar进行备份,你可能想要使用复制或保留而不是指定为你的存储类...你会使用复制如果它总是NSString或任何具有可变子类的类...但由于id不能指定为类型安全,你可以这样做:

@property(copy) id <NSCopying> iTempStore;

@propery(retain)  id iTempStore;

答案 1 :(得分:0)

技术上还可以......但不是很好......

  1. 如果您要声明属性,则无需将其作为实例变量。
  2. 不要使用非ARC的东西......所有ios设备都支持ARC(不确定第一代)但至少在所有真正重要的设备上都支持。{/ li>
  3. 如果您知道对象类型,则不需要使用id。 id用于当您不确定返回类型时。
  4. 您的代码应如下所示:

    @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);
    
    
    }