objective-c - 类扩展中私有(private)实例变量和属性的区别(Objective-c 2.0)

标签 objective-c properties nonatomic

以下 Objective-c 2.0 代码片段之间有什么区别(如果有的话):

// in MyClass.h
@interface MyClass
@private
    NSString *myString;
@end

// in MyClass.m
@interface MyClass ()
@property (nonatomic, copy) NSString *myString;
@end

@implementation MyClass
@synthesize myString;
@end

最佳答案

ivar(第一个)是一个普通变量,不能在其创建的接口(interface)的实现范围之外访问(如果使用 @private 指令)并且没有合成访问器方法。

属性(第二个)是一个包装的 ivar 并且总是可以通过实例化一个类来访问并且具有合成的访问器方法(如果正在使用 @synthesize 指令)

MyClass *class = [[MyClass alloc] init];
[class setMyString:@"someString"]; //generated setter
NSString *classString = [class myString]; //generated getter

关于objective-c - 类扩展中私有(private)实例变量和属性的区别(Objective-c 2.0),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8607595/

相关文章:

c# - 如何定义相互依赖的属性

java - Spring配置属性的初始化

ios - 原子属性和非原子属性有什么区别?

objective-c - 我应该为每个函数声明函数原型(prototype)吗?

objective-c - 在 nibless AppKit 项目中将 View 初始化放在哪里?

ios - 如何在swift 3.0中编写这段代码,特别是如何在swift3中使用宏?

Objective-C 异步 http 请求

Kotlin 接口(interface)属性 : Only require public getter without public setter

Objective-C:标量属性默认为原子?

c++ - 原子访问 C++11 和 OpenMP 中的非原子内存位置?