2012-03-28 5 views
1

이것은 이전에 게시 한 것과 관련된 질문입니다. NSObject를 서브 클래 싱하는 객체에 대해 copyWithZone을 구현하는 가장 좋은 방법을 먼저 살펴 보았습니다. 나는 내가 가지고있는 것에 만족한다. (001 참조) 세터를 제거하는 것에 대해 물어보고 싶다.인스턴스 변수를 직접 설정 하시겠습니까?

가 그것은 내가 쓸 수있는 나에게 지적되었다

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

내가 먼저이 개 질문의 ->는 C++ 표기법을 사용하고, 객체의 속성에 액세스의 목표 - C의 방법은 (이 setter/dot 표기법을 사용하지 않고)?

newCrime->_coordinate = _coordinate; 

하지만 강한 포인터 작성하는 일에 대해 확실하지 않다;

마지막으로

, assignstrong 나는 사람들을 작성하는 방법, 나는 할당이 될 것이라고 확신

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 포인터 표기법입니다. 당신의 머리 :)에서 그 C++ 정크 메일을 보내 주시기 바랍니다

지금까지 ARC에 관한 한, 당신의 변수는 귀하의 인터페이스에 정의가 :

@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' selector를 사용하여 강하고 할당되어야합니다. –

+0

감사합니다. Richard에게 많은 감사를드립니다. copyWithZone 구현과 관련하여 -copyWithZone을 사용하여 복사 속성을 할당하고 싶습니다. – fuzzygoat

관련 문제