zoukankan      html  css  js  c++  java
  • Objective-C学习笔记--@implementation

    代码:

    @implementation Circle
    -(void) setFillColor: (ShapeColor) c
    {
        fillColor=c;
    }
    
    -(void) setBounds: (ShapeRect) b
    {
        bounds=b;
    }
    
    -(void) draw
    {
        NSLog(@"draw a cifrcle at(%d %d %d %d) in %@",bounds.x,bounds.y,bounds.width,bounds.heihgt,colorName(fillColor));
    }
    
    @end

    @implemention

    是一个编译器制定,表明你将为某个类提供代码。类名出现在@implemention之后,该行的结尾处没有分号。

    接下来是各个方法的定义。它们不必按照在@interface指令中的顺序出现,你甚至可以在@implementation中定义那些在@interface中无相应生命的方法。可以把他们看成是私有方法,仅在类的视线中使用

    你也许认为,既然单独在@implementation指令中定义方法,就不能从该实现之外访问该方法。但事实并非如此,Objective-C中不存在真正的私有方法,也无法把某个方法标识为私有方法,从而禁止其他代码调用它。这是Objective-C动态本质的副作用

    setFillColor: 定义的第一行看上去与@interface部分的声明非常类似。二者的主要差别是结尾处没有分号。我们把参数重新命名为简单的c字符了,@interface和@implementation间的参数名不同是正确的。在这里如果我们继续使用参数名fillColor,就会隐藏fillColor实例变量,并且编译器会生成警告信息。

    说明:为何一定要重新命名fillColor呢?我们已经通过类定义了一个名为fillColor的实例变量,可以在该方法中引用该变量——它在作用于范围中。因此,如果使用相同的名称定义一个变量,编译器会阻止我们访问该实例变量,使用相同的变量名会隐藏处事变量,可以为参数使用新的名称来避免该问题。

    @interface部分的方法生命中使用了名称fillColor,是为了确切告诉读者参数的用处,在实现中,我们必须区分参数名称和实例变量名称,最简单的方式就是讲参数重新命名。

    setFillColor方法只有一行代码:fillColor=c;如果你特别好奇,可能会对实例变量的存储位置感兴趣,在Objective-C中调用方法时,一个名为self的秘密隐藏参数将被传递给接收对象,而这个参数引用的就是该接收对象。例如,在代码[circl setFillColor:kRedColor]中,方法将circle作为其瑟利夫参数进行传递。因为self的传递过程是秘密的和自动的,因此你不必自己来实现。方法中引用实例变量的代码如下所示:self->fillColor=c;顺便提一下,传递隐藏的参数是另一种间接操作的示例。因为Objective-C运行时(runtime)可以将不同的对象当成隐藏的self参数传递,所以那些对象的实例变量发生更改时,运行时也可进行相应的更改。

    说明:用户运行应用程序是,Objective-C运行时是支持这些应用程序的代码块。运行时执行非常重要的任务,如想对象发送消息和传递参数。

  • 相关阅读:
    Mysql 单表查询-排序-分页-group by初识
    Mysql 单表查询where初识
    Mysql 库表操作初识
    Mysql 常见数据类型及约束
    数据库 初识
    Mysql 游标初识
    Mysql 控制结构初识
    Mysql 存储过程初识
    单链表-Python实现-jupyter->markdown 格式测试
    MySQL 触发器学习-markdown->html 格式测试
  • 原文地址:https://www.cnblogs.com/cc-Cheng/p/3315211.html
Copyright © 2011-2022 走看看