直接设置实例变量?

时间:2012-03-28 16:21:08

标签: iphone objective-c cocoa-touch

这是我今天早些时候发布的一个相关问题,我最初看的是如何最好地为一个NSObject子类的对象实现copyWithZone。我对我所拥有的东西感到非常满意(参见001 :)但是想问一下如何删除二传手(如果它甚至很重要,请说如果它不是真的有必要的话)。

有人指出我可以写:

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

首先我有两个问题,->正在使用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;
}

1 个答案:

答案 0 :(得分: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);
}