2012-03-28 88 views
1

這是我今天早些時候發佈的一個相關問題,我最初考慮如何最好地爲NSObject的子類實現copyWithZone。我對我所擁有的東西感到非常滿意(見001),但想問一下關於解僱的問題(如果問題很重要,請說出它是否真的有必要)。直接設置實例變量?

有人指出,我認爲我可以這樣寫:

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

我有兩個問題,首先,在->是用C++符號,有沒有訪問對象的屬性的Objective-C的方式(不使用setter/dot符號)?

最後,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指針表示法。請拿到C++垃圾從你的腦子:)的

至於ARC而言,只需要在你的界面定義爲這樣的變量:

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

@end 

而且當你設定的ARC將完成剩下的使用指針符號的對象(->)。

對於純C的指針符號的一個例子,看看下面的例子:

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++,我指的是 - >在訪問成員的OOP感對象的變量。如果您在@interface中將變量指定爲__strong __weak等,那麼只需將它們直接分配,即newCrime - > _ month = _month; ? – fuzzygoat 2012-03-28 17:04:19

+0

@fuzzygoat是的,ARC會根據需要添加保留/釋放週期。但請注意,'copy'屬性需要很強並且使用'-copy'選擇器進行分配。 – 2012-03-28 17:39:11

+0

謝謝,非常感謝理查德,我猜測對於我的copyWithZone實現,我想使用-copyWithZone指定複製屬性? – fuzzygoat 2012-03-28 18:03:24