gpt4 book ai didi

iphone - @class @synthesize 可用性

转载 作者:行者123 更新时间:2023-11-28 18:24:09 27 4
gpt4 key购买 nike

好的,我有我为核心数据创建的类<​​/p>

LoginPass.h

然后我有头等舱

FirstClass.h

然后我需要在 SecondClass 中使用这些类,我在其中使用 @class 声明它们。头文件

SecondClass.h
...
@class FirstClass;
@class LoginPass;
...
@interface SecondClass : UIViewController
{
......
}
@property (strong, nonatomic) FirstClass *fromFirstClass;
@property (strong, nonatomic) LoginPass *myEntity;
...
@end

在 .m 文件中

#import "SecondClass.h"
#import "FirstClass.h"
#import "LoginPass.h"
@implementation SecondClass
...
@synthesize fromFirstClass = _fromFirstClass;
@synthesize myEntity = _myEntity;
...

好的,我可以在代码中犯一些错误,抱歉。我真的不知道,现在不感兴趣为什么我需要写

 @synthesize myEntity = _myEntity;

但不是

 @synthesize myEntity;

但是我还有一个问题。为什么我可以在我的代码中使用 then

 self.fromFirstClass

但是我不会用

 self.myEntity

Xcode 给我一个错误并告诉我应该使用

 self._myEntity

有什么区别?为什么我可以使用 self.fromFirstClass 但不能使用 self.myEntity? @结束

最佳答案

您混淆了实例变量,它们是对象结构的变量部分,而属性实际上是设置和获取值的方法 .

当您声明 @property (strong, nonatomic) FirstClass *fromFirstClass; 时,您实际上声明了两个方法 - (FirstClass *)fromFirstClass- (void) setFromFirstClass:(FirstClass *)aFirstClass.

当你使用点语法FirstClass *classA = self.fromFirstClass;时,你实际上调用了一个方法,它等同于FirstClass *classA = [self fromFirstClass];。同样,如果你写self.fromFirstClass = classB;,你实际上调用了:[self setFromFirstClass:classB];

如果直接在对象方法中使用实例变量的名称,则可以访问该变量。

现在,当您在现代运行时编写 @synthesize fromFirstClass; 时,您让编译器创建一个具有相同名称的实例变量 fromFirstClass 并编写两个方法 - (FirstClass *)fromFirstClass- (void)setFromFirstClass:(FirstClass *)aFirstClass 将获取和设置实例变量。

如果您编写 @synthesize fromFirstClass = _fromFirstClass;,会发生同样的事情,只是创建的实例变量的名称前面有一个下划线。

最后,在最新版本的编译器中,如果您什么都不写,默认行为是为您自动@synthesize fromFirstClass = _fromFirstClass

关于iphone - @class @synthesize 可用性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13986993/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com