gpt4 book ai didi

Objective-c 差异

转载 作者:行者123 更新时间:2023-11-28 19:14:45 24 4
gpt4 key购买 nike

在 .h 或 .m 文件中声明 @property 有什么区别

@property (nonatomic, readwrite, assign) BOOL notificationDidLaunch;

与变量作用域有关吗?

同样在 .h 文件中,像这样用括号声明字符串有什么区别

@interface AppDelegate : NSObject < UIApplicationDelegate > {
NSString *hat;
}

像下面这样在他们之外做

@property (nonatomic, strong) NSString *hat;

最佳答案

正如 Tiago 所说,将 @property 声明放在 .m(实现)文件的类扩展中是一种使属性私有(private)的方法,因此只有类本身才能访问它。当在 .h(公共(public)接口(interface)文件)中声明时,它对导入该 .h 文件的所有代码都是可见的。请记住,@properties 实际上只是为声明和合成访问器方法提供便利,并且与 Objective-C 中的所有方法一样,它们永远不是真正私有(private)的。如果您尝试在另一个类中使用非公共(public)方法,您得到的最好结果是编译器警告没有公共(public)接口(interface)声明有问题的方法。

对于问题的第二部分,这声明了一个名为 myString 的实例变量(“ivar”):

@interface MyClass : NSObject
{
NSString *myString;
}

虽然这声明了一个名为 myString 的属性:

@property NSString *myString;

实例变量和@property 之间的区别比仅仅说一个ivar 只能由您的类的实例访问更为重要。声明一个 ivar 会向内存中的类结构添加一个变量。相反,@properties 在类上声明/定义方法。默认情况下,这些方法设置/获取关联的、名称相似的 ivar 的值,但这不是必需的,并且不直接访问 ivar 的 @property 具有方法是完全可以接受的并且很常见。例如,一个类具有由 _firstName_lastName ivar 支持的 firstName 和 lastName 属性,以及第三个 fullName 属性,该属性简单地将 firstName 和lastName getter 方法一起使用(和/或在其 set 方法中拆分两部分名称)。

关于Objective-c 差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13013596/

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