【问题标题】:What's the difference between _variable & self.variable in Objective-C? [duplicate]Objective-C 中的 _variable 和 self.variable 有什么区别? [复制]
【发布时间】:2013-02-28 07:23:22
【问题描述】:

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

以下是一个简单的示例

MyClass.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。

非常感谢任何意见。谢谢!

【问题讨论】:

标签: objective-c variables ios6


【解决方案1】:

不同的是:

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

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

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

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

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

【讨论】:

  • 在您的示例中使用大括号可能会让初学者感到困惑!我会坚持self.variableName
  • 你能解释一下你的最后一句话吗? "如果你用retainstrong 标记属性,self.variable 将为你保留一个对象,_variable 根本不解决内存管理问题"
猜你喜欢
  • 1970-01-01
  • 2015-03-14
  • 1970-01-01
  • 1970-01-01
  • 2012-04-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-17
相关资源
最近更新 更多