2

我很难理解如何理解将属性设置为变量和对象的实际用途。我尝试阅读许多教程和苹果文档,但我仍然无法理解为什么我们应该使用属性以及为什么我们需要合成属性?考虑到我们声明

@property(nonatomic,retain) NSString *str;

为什么我们需要声明一个属性。据我了解,我们可以str通过您的课程访问字符串对象。但是为什么我们需要在这里创建一个属性呢?

有人可以帮我吗?

4

3 回答 3

4

属性通常用于从类外部访问实例变量。

例如,如果你有一个指向你的类的指针,你可以像这样获取/设置属性

someObject.str = @"some string";

您还必须对@synthesize属性,通常是这样的:

@synthesize str = _str;

在该片段中,_str是属性设置和获取的实例变量。

这些属性本质上只是创建访问器(setter/getter)的快捷方式。

例如,使用您的属性的 setter 看起来像这样:

- (void)setStr:(NSString *)str {
    if(str != _str) {
        [_str release];
        _str = [str retain];
    }
}

吸气剂看起来像这样:

- (NSString *)str {
    return _str;
}

通过创建属性,会自动为您创建前两个代码块。

于 2012-04-15T17:41:42.220 回答
1

属性是一个公共接口,它使其他对象能够在声明变量的对象内检查和设置变量的值。

您可以通过编写获取和设置变量值的显式方法来实现相同的目的。

请注意,当您深入了解它时,Objective-C 中的属性/合成对实际上是编译器使用定义明确的模式为您构建这些方法的简写。

因此在objective-c

@property(nonatomic,retain) NSString *str;
....
synthesize str;
...

最终创建了两个方法,定义为:

void setStr:(NSString*) value;
NSString* str;

还有那个文字

Object.str = @"Hello world";
NSString* value = Object.str;

分别转换成:

[Object setStr:@"Hello world"];
NSString* value = [Object str];
于 2012-04-15T17:40:18.023 回答
1

属性的使用是 Obj-C 为程序员提供的一种工具。

您可以编写带有或不带有属性的程序。

您可以将属性与@synthesize编译器指令结合使用。

属性声明指示编译器声明 getter/setter 方法对。您必须手动编写 setter 和 getter。此属性声明允许您使用点符号来访问实例变量。编译器会将点表示法转换为适当的 getter/setter 方法。

您可以使用该@synthesize指令告诉编译器为 getter/setter 方法生成代码。

使用属性,您必须编写更少的代码,并且可以使用点表示法。另一种方式,不使用属性,您必须编写 getter/setter 方法,并且不允许使用点表示法。

但是你可以用任何一种方式编写程序。因此,由您决定使用属性并合成它们。

于 2012-04-16T09:37:06.533 回答