Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.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
iOS基础:私有属性、公共setter/getter_Ios_Objective C_Model - Fatal编程技术网

iOS基础:私有属性、公共setter/getter

iOS基础:私有属性、公共setter/getter,ios,objective-c,model,Ios,Objective C,Model,我一直在阅读教程,现在正在设计模型的体系结构,由于我是Objective-C新手,我不确定这些标准是否像Java那样,您有public setter/getter和private attribute。这是我想问的一个问题 如果标准是这样,则在*.m文件@interface中声明私有属性,但是我如何@syntetizeasetter/getter以及如何从外部调用它们:它像[object SetProperty:property]吗? 如果标准不同,我可以得到一个模型类的示例吗 提前感谢。您可以创

我一直在阅读教程,现在正在设计模型的体系结构,由于我是
Objective-C
新手,我不确定这些标准是否像
Java
那样,您有public setter/getter和private attribute。这是我想问的一个问题

如果标准是这样,则在
*.m
文件
@interface
中声明私有属性,但是我如何
@syntetize
asetter/getter以及如何从外部调用它们:它像
[object SetProperty:property]吗?

如果标准不同,我可以得到一个模型类的示例吗


提前感谢。

您可以创建私有属性并创建自己的公共setter/getter方法。通过此方法,您可以重新分配或检索值

@interface Person : NSObject
-(void)setTheName:(NSString *)fullName;
-(NSString *)theName;
@end
实施文件:

#import "Person.h"

@interface Person()
@property(atomic) NSString *fullName;
@end

@implementation Person

-(void)setTheName:(NSString *)fullName{
    self.fullName = fullName;
}

-(NSString *)theName{
    return self.fullName;
}

@end
在上面的示例中是私有的,但是您可以检查选择器是否仍然存在(但会抛出警告)

输出将是:



但是很少需要从外部设置任何私有财产。如果这是要求,我们可以将属性公开。

您可以创建私有属性并创建自己的公共setter/getter方法。通过此方法,您可以重新分配或检索值

@interface Person : NSObject
-(void)setTheName:(NSString *)fullName;
-(NSString *)theName;
@end
实施文件:

#import "Person.h"

@interface Person()
@property(atomic) NSString *fullName;
@end

@implementation Person

-(void)setTheName:(NSString *)fullName{
    self.fullName = fullName;
}

-(NSString *)theName{
    return self.fullName;
}

@end
在上面的示例中是私有的,但是您可以检查选择器是否仍然存在(但会抛出警告)

输出将是:



但是很少需要从外部设置任何私有财产。如果这是我们的要求,我们可以将属性公开。

事实上,Objective-C使用的术语与大多数其他语言(如Java)不同。如果我得到了您的要求,如果您希望一个属性在类之外直接可用,那么该属性必须在.h文件中声明。但是,如果要隐藏代码的实现,可以在.m文件中声明一个属性,并向外部世界提供setter/getter,只需返回希望可见的信息

对我来说,@synthesis子句是一个模拟词。通过合成一个属性,getter/setter将自动实现,您无需自己完成


这回答了你的问题吗?

事实上,Objective-C使用的术语与大多数其他语言(如Java)不同。如果我得到了您的要求,如果您希望一个属性在类之外直接可用,那么该属性必须在.h文件中声明。但是,如果要隐藏代码的实现,可以在.m文件中声明一个属性,并向外部世界提供setter/getter,只需返回希望可见的信息

对我来说,@synthesis子句是一个模拟词。通过合成一个属性,getter/setter将自动实现,您无需自己完成


这是否回答了您的问题?

如果您想访问属性,通常的方法是使用类的.h文件中的关键字
@property
来定义属性。这将自动定义一个setter和一个getter,从Xcode 4.4开始,您不需要合成属性


可以在.m文件中访问您的私有属性,默认情况下,属性名称的前缀为“uu”。

如果要访问属性,常用的方法是使用类的.h文件中的关键字
@property
来定义属性。这将自动定义一个setter和一个getter,从Xcode 4.4开始,您不需要合成属性


可以在.m文件中访问您的私有属性,并且默认情况下,属性名称的前缀为“uu”。

属性本质上是一种承诺,即类提供某些访问器方法。例如:

@property(strong, nonatomic) Foo *foo;
是类提供
-foo
-setFoo:
方法的承诺。因此,如果您希望访问器是公共的,请在类的公共接口(即在头文件中)中声明该属性,然后使用它


确实,支持该属性的实例变量(
\u foo
,除非指定其他名称)将可以访问,但直接访问另一个对象的实例变量的形式非常糟糕。Objective-C中的许多内容都受约定的约束,这通常足以避免出现问题。此外,给定的属性根本不必由任何实例变量支持:像
fullName
这样的属性可以从其他属性(比如
firstName
lastName
)计算出来,因此,客户机有很好的理由避免直接访问IVAR,而不仅仅是约定。

属性本质上是一个类提供某些访问器方法的承诺。例如:

@property(strong, nonatomic) Foo *foo;
是类提供
-foo
-setFoo:
方法的承诺。因此,如果您希望访问器是公共的,请在类的公共接口(即在头文件中)中声明该属性,然后使用它


确实,支持该属性的实例变量(
\u foo
,除非指定其他名称)将可以访问,但直接访问另一个对象的实例变量的形式非常糟糕。Objective-C中的许多内容都受约定的约束,这通常足以避免出现问题。此外,给定的属性根本不必由任何实例变量支持:像
fullName
这样的属性可以从其他属性(比如
firstName
lastName
)计算出来,因此,除了惯例之外,客户机还有很好的理由避免直接访问IVAR。

请理解,声明属性会导致编译器为您创建访问器。因此,如果我个人需要伪私有财产,我会在
#import "Person.h"

@interface Person()
@property (nonatomic, readwrite) NSString *fullName;
@end

@implementation Person

 ... whatever this class does
@end