Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
@在Objective-c中合成?_Objective C - Fatal编程技术网

@在Objective-c中合成?

@在Objective-c中合成?,objective-c,Objective C,测试h NSString *name; @property(nonatomic,retain) NSString *name; test.m @synthesize name; 在这里,我们为什么要在属性和.m文件中使用非原子,保留,为什么要使用@synthetic 请回答, 非原子的被详细描述 retain表示当该值设置为除nil以外的任何值时,将保留该属性。还有其他选项,如复制和分配。通常,可以复制的对象类型应该使用copy,如NSStringassign仅设置指针值 @synthesi

测试h

NSString *name;
@property(nonatomic,retain) NSString *name;
test.m

@synthesize name;
在这里,我们为什么要在属性和.m文件中使用非原子保留,为什么要使用@synthetic

请回答,

非原子的被详细描述

retain表示当该值设置为除nil以外的任何值时,将保留该属性。还有其他选项,如复制分配。通常,可以复制的对象类型应该使用copy,如
NSString
assign仅设置指针值

@synthesis删除属性的getter和setter方法,这是非原子保留工作所必需的

另外,如果使用保留复制,请确保在
解除锁定
方法中释放对象

- (void)dealloc {
    [name release];
    [super dealloc];
}

nonatomic
表示设置属性不是线程安全的,
retain
表示保留新值(并释放旧值),而
@synthesis
实际创建属性所需的方法。在本例中,其计算结果如下:

- (NSString *)name {
    // Method "name", returning content of variable "name".
    return name;
}

- (void)setName:(NSString *)newName {
    [newName retain];
    [name release];
    name = newName;
    // Also some magic for KVO is added here.
}

您的标题与您的问题不匹配。
非原子
与线程安全性没有多大关系。这只是意味着,在线程化环境中,您将始终获得一个可行的值。不保证它是否正确(即原子性不是一个事务系统)。这篇文章写得不错,但当你真的不需要复制对象时,为什么你要复制对象呢?特别是当您使用不可变对象(如NSString)时,复制只会浪费内存。到目前为止,我很少发现需要复制。@DarkDust:每个NSMutableString都是有效的NSString。你不想意外地存储其中的一个,然后让它在你下面更改。至少实现复制的大多数对象都是可变的。因此,以这种方式声明所有属性是一个好主意。另外,作为一种优化,NSString(不可变版本)仅在您告诉它复制时保留。@bbum:谢谢您的澄清。我一直认为当使用atomic+Synthesis时,getter返回的指针值是线程安全的。它是安全的,因为您将返回有效的内容。考虑您有
firstName
lastName
fullName
(这两个属性组合在一起)属性。没有多少代码< @属性>代码>原子性将防止设置名字,然后姓,而第二个线程在中间调用全名。