2012-03-28 12 views
1

これは私が以前に投稿したものと関連した質問です。最初はNSObjectをサブクラス化するオブジェクトに対してcopyWithZoneをどのように実装するのが最適かを見ていました。私は私が持っているものにかなり満足しています(001参照)が、セッターを取り除くことについて尋ねたがっています。インスタンス変数を直接設定していますか?

は、それは私が書くことができることを私に指摘された:

newCrime->_title = [_title copyWithZone:zone]; 

私が最初に二つの質問を持って、->はC++の表記を使用している、オブジェクトのプロパティにアクセスするのObjective-Cの方法は(ありセッター/ドット表記を使わずに)?

は最後に、assignstrongがどのように私はそれらを記述し、私は割り当てが可能だろうと確信している:

newCrime->_coordinate = _coordinate; 

が、私は強いポインタに書き込むかについてわかりません。

newCrime->_month = 

@property(nonatomic, strong) NSString *month; 
@property(nonatomic, strong) NSString *category; 
@property(nonatomic, assign) CLLocationCoordinate2D coordinate; 
@property(nonatomic, strong) NSString *locationName; 
@property(nonatomic, copy) NSString *title; 
@property(nonatomic, copy) NSString *subtitle; 

// 001: 
- (id)copyWithZone:(NSZone *)zone { 
    Crime *newCrime = [[[self class] allocWithZone:zone] init]; 
    if(newCrime) { 
     [newCrime setMonth:_month]; 
     [newCrime setCategory:_category]; 
     [newCrime setCoordinate:_coordinate]; 
     [newCrime setLocationName:_locationName]; 
     [newCrime setTitle:_title]; 
     [newCrime setSubtitle:_subtitle]; 
    } 
    return newCrime; 
} 

答えて

2

->はC++の表記法ではなく、Cのポインタ表記です。限りARCに関しては、ちょうどあなたの変数は以下のようなあなたのインターフェイスで定義されています:)あなたの頭のうち、C++ジャンクこと

を入手してください:

@interface myObject : NSObject 
{ 
    __strong strongIvar; 
    __weak weakIvar; 
    __unsafe_unretained assignIvar; 
} 

@end 

そして、あなたが設定したときにARCは残りを行いますポインタ表記を使用するオブジェクト(->)。純粋なCでのポインタの表記の例については

、以下の例を見て: - メンバーにアクセスするのOOPの意味で>

struct myStruct { 
    int intMember; 
    double doubleMember; 
    char *stringMember; 
}; 

#include <stdio.h> 
#include <string.h> 

int main(void) 
{ 
    struct myStruct *structVar = malloc(sizeof(myStruct)); 
    structVar->intMember = 10; 
    structVar->doubleMember = M_PI * 2; 
    structVar->stringMember = strdup("Hello World!"); 

    printf("%i %d %s", structVar->intMember, structVar->doubleMember, structVar->stringMember); 

    free(structVar->stringMember); 
    free(structVar); 
} 
+0

がC++に関して、私の謝罪をありがとう、私はを参照してオブジェクトの変数。 @interfaceに__strong __weakなどの変数を指定すると、後でnewCrime - > _ month = _monthのように直接割り当てるだけで十分です。 ? – fuzzygoat

+0

@fuzzygoatはい、ARCは必要に応じて保持/リリースサイクルを追加します。しかし、 'copy'プロパティは強く、' -copy'セレクタを使って割り当てる必要があることに注意してください。 –

+0

ありがとう、リチャードに感謝します。コピーライトプロパティを-copyWithZoneを使用して割り当てたいと思うcopyWithZone実装に関して、私はそれを推測していますか? – fuzzygoat

関連する問題