0

我是编程新手,所以这里的任何人都可以告诉我以下内容是否在 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];
}
4

2 回答 2

0

id 可以保存对任何对象的引用,因此在那里存储字符串很好,但是由于您使用 iVar 支持,因此您可能希望使用复制或保留而不是分配为您的属性存储类...如果它,您将使用复制总是 NSString 或任何具有可变子类的类......但由于 id 不能指定类型安全,你可以这样做:

@property(copy) id <NSCopying> iTempStore;

或者

@propery(retain)  id iTempStore;
于 2013-04-21T15:26:59.723 回答
0

技术上没问题……但不是很好……好

  1. 如果你声明一个属性,你也不需要它作为实例变量。
  2. 不要使用非 ARC 的东西......所有 ios 设备(不确定第一代)都支持ARC ,但至少在所有真正重要的设备上都支持。
  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);


}
于 2013-04-21T15:30:14.897 回答