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以外のものを使用しないでください... 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);


}
于 2013-04-21T15:30:14.897 に答える