我对“自我”的理解是否正确?

时间:2011-12-26 08:49:35

标签: objective-c cocoa-touch methods self

我将提供一个简单的方法然后解释我是如何看到它的,如果这是不正确的,请告诉我并纠正我。我觉得我理解'自我',但仍然怀疑自己。

  -(NSString *)giveBack {
    NSString *string = [NSString stringWithFormat:@"Hi there!"];
    return string;
}

-(IBAction)displayIt {
    NSString *object = [self giveBack];
    [myView setText:object];
}

“myView”是一个UITextView对象。

现在至于'自我'..

我基本上在我的-displayIt方法中说我正在创建一个名为'object'的NSString对象,并在其中存储一个返回字符串的方法,该字符串显示“Hi there”。 这个方法(名为'giveBack')是在我的类名称上执行的(无论我命名为什么项目)。这是对的吗?

3 个答案:

答案 0 :(得分:2)

不,您没有创建名为object的对象,然后在其中存储方法等。您正在创建一个变量,它可以包含引用到一个对象并在其中存储对通过调用方法获得的对象的引用。

[注意:以下假设您使用的是自动内存管理(ARC或垃圾回收),不会提及引用计数。如果您使用的是手动记忆,还有更多需要考虑...]

为您的样本添加行号:

1. -(NSString *)giveBack
   {
2.     NSString *string = [NSString stringWithFormat:@"Hi there!"];
3.     return string;
   }

4. -(IBAction)displayIt
   {
5.     NSString *object = [self giveBack];
6.     [myView setText:object];
   }
  1. giveBack声明为类的实例方法,要调用它必须在特定实例上调用。

  2. RHS([NSString stringWithFormat:@"Hi there!"])调用一个类方法,该方法创建类型为NSString的对象,并向该对象返回类型为NSString *的引用。 LHS声明了一个变量string),它可以保存对NSString对象的引用。赋值(=)将RHS返回的引用存储到LHS声明的变量中。

  3. 作为方法

  4. 的结果,返回string中的值
  5. 声明名为displayIt

  6. 的实例方法
  7. RHS:在对象实例giveBack上调用实例方法(self - - self是在实例方法中对当前对象实例的引用(在此情况1}})。 LHS:声明类型为displayIt的变量object。赋值:将对RHS上方法调用返回的NSString *的引用存储到LHS中声明的变量中。

  8. 在变量NSString引用的对象实例上调用实例方法setText:,将其引用传递给变量myView中的NSString

答案 1 :(得分:2)

我想,你一般都是正确的。

但在下面提到:

  

这个方法(名为'giveBack')是在我的班级名称上执行的(无论我命名为什么项目)

我无法理解你的意思。

班级名称只是一个符号(即人类读者的文字)。

在方法声明的开头用-符号表示Objective-C类的方法。

换句话说,所有方法声明都以@implementation CLASS_NAME中的-开头... @end block是CLASS_NAME类的实例方法。

当我们调用另一个实例方法(在实例方法中)时,我们使用self关键字。因为所有Objective C方法调用都必须指定目标对象,在这种情况下,我们调用自己(当前CLASS_NAME实例本身)。我们使用self关键字。

对不起我的疑惑词......我想:我很难解释: - (

答案 2 :(得分:1)

你要存储'giveBack'返回的字符串,而不是方法本身。该方法是该类的一部分。 'self'是你正在调用'giveBack'(以及'displayIt')的对象的实例。