objective-c - Objective-C 中的 _variable 和 self.variable 有什么区别?

标签 objective-c variables ios6

<分区>

我对 Objective C 和 iOS 还很陌生,目前正在尝试学习使用 iOS 6 SDK 进行应用程序开发。一个我真的无法理解的概念是在 .m 文件中访问时“_variable”和“self.variable”之间的区别。它们相同吗?还是不同?

下面是一个简单的例子

我的类.h

#import <Foundation/Foundation.h>

@interface MyClass : NSObject
@property (strong, nonatomic) NSString *myName;
@end

MyClass.m

#import "MyClass.h"

@interface MyClass ()
@property (nonatomic, strong) NSString *anotherName; 
@end

@implementation MyClass
- (void) myFunction {
    _myName = @"Ares";
    self.myName = @"Ares";

    _anotherName = @"Michael";
    self.anotherName = @"Michael";
}
@end

那么上面设置变量的实现有区别吗? 变量“myName”是 Public,而“anotherName”是 Private。

非常感谢任何输入。谢谢!

最佳答案

区别在于:

带有_的变量名是实例变量。

self.variable 正在对您的对象调用 getter 方法。

在您的示例中,实例变量是自动生成的,您也不需要合成您的属性。

如果您不使用 ARC-,您的示例中真正重要的区别就会发挥作用-

self.variable 将为您保留一个对象,如果您使用 retainstrong 标记该属性 _variable 根本没有解决内存管理问题

关于objective-c - Objective-C 中的 _variable 和 self.variable 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15129795/

相关文章:

iphone - 从 NSArray 获取特定范围

Objective-C:将整个 double 值转换为字符串而不丢失数据

javascript - 在空白行上获取内容可编辑的 UIWebView 中的插入符号

c - 动态分配并返回局部变量

iphone - iOS 6 问题将 MPMediaItem 转换为 NSData

objective-c - 是否执行 self = self init;返回 self ; Objective-C 中的效果与 swift 中 self.init() 的效果相同吗?

javascript - Node.JS - 通过 Alexa 说出查询结果

onload 函数内的 Javascript 变量范围

ios - 我可以同时支持 iOS 6 和 iOS 7 吗?

iphone - 有什么方法可以知道 iPhone 连接到哪个网络(LTE 与 GSM)