这是我今天早些时候发布的一个相关问题,我最初看的是如何最好地为一个NSObject子类的对象实现copyWithZone。我对我所拥有的东西感到非常满意(参见001 :)但是想问一下如何删除二传手(如果它甚至很重要,请说如果它不是真的有必要的话)。
有人指出我可以写:
newCrime->_title = [_title copyWithZone:zone];
首先我有两个问题,->
正在使用C ++表示法,是否有一种客观的方法来访问对象的属性(不使用setter / dot表示法)?
最后,assign
和strong
我将如何编写这些内容,我很确定分配将是:
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;
}
答案 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);
}