Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.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
Iphone 属性声明中非原子和保留的含义是什么_Iphone_Objective C_Ipad_Properties_Getter Setter - Fatal编程技术网

Iphone 属性声明中非原子和保留的含义是什么

Iphone 属性声明中非原子和保留的含义是什么,iphone,objective-c,ipad,properties,getter-setter,Iphone,Objective C,Ipad,Properties,Getter Setter,我对iOS编程还不熟悉。有人能告诉我下面这行代码的确切含义吗 @property(**非原子,保留**)UIView*singleTapView 我已经多次使用@property,但实际上并不知道(非原子、保留、分配或复制)函数的确切含义。。有人能帮我吗。。 谢谢当您声明@property时,您可能应该阅读。的一章,您正在隐式创建该特定变量的getter和setter方法 getter和setter的工作方式取决于您如何声明@property 比如说 @property(nonatomic,re

我对iOS编程还不熟悉。有人能告诉我下面这行代码的确切含义吗
@property(**非原子,保留**)UIView*singleTapView

我已经多次使用@property,但实际上并不知道
(非原子、保留、分配或复制)
函数的确切含义。。有人能帮我吗。。
谢谢

当您声明@property时,您可能应该阅读。

的一章,您正在隐式创建该特定变量的getter和setter方法

getter和setter的工作方式取决于您如何声明@property

比如说

@property(nonatomic,retain)
将生成setter方法,在该方法中,其retain计数将增加,并且该变量将不是线程安全的


每次键入
self.variableName
时,它都会调用由
@property

创建的setter方法,这是一个应该更频繁地提出的问题

@property
是一个简单的属性声明。这里没什么新鲜事


非原子
意味着没有为相应的
@synthesis
访问器实现对象锁定,只是直接提供属性。这比原子的要快,但在多线程用例中可能会导致部分写入值等

如果使用默认值(即
原子
),则@synthesisted方法使用对象级锁来确保对属性的多次读/写被序列化。正如前面指出的,这并不意味着整个对象是线程安全的,但是属性读/写是安全的

如果您编写自己的访问器方法,那么这不会起任何作用。但大多数程序员还是会写


保留的事情有点简单。基本上,这意味着您需要一个使用

alloc
->
init
->
保留
->
发布


做事的周期。基本上,除了布尔和整数之类的基元之外,其他的都要用到它

属性在iOS中用于替换我们通常编写的getter和setter方法

您的代码行:

@属性(非原子,retain)UIView*singleTapView

这意味着您正在为UIView编写getter和setter方法

当您在代码中的任何位置使用UIView时,它将自动保留或增加UIView的保留计数

但是,当您使用:

@属性(非原子,赋值)UIView*singleTapView

然后使用UIView,其保留计数不会增加。这意味着它将不会保留您的UIView


“复制”只是用来将当前对象的值赋予新对象。

对于非原子/原子部分,您应该阅读。它并不特定于iOS,但会让您更好地理解

对于保留部分,此代码将帮助您。它类似于
@synthesis
将为您生成的内容

//getter
- (Book *)book
{
    return [[book retain] autorelease];
}

//setter
- (void)setBook:(Book *)aBook
{
    if (book == aBook)
    {
        return;
    }
    Book *oldBook = book;
    book = [aBook retain];
    [oldBook release];
}

第一个链接不再起作用,下面是新链接: