• 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运行时是支持这些应用程序的代码块。运行时执行非常重要的任务,如想对象发送消息和传递参数。

  • 相关阅读:
    VC++6.0在win8.1系统下运行失败的解决办法
    oracle赋值问题(将同一表中某一字段赋值给另外一个字段的语句)
    Myeclipse 2014破解教程
    关于js赋值给input解析
    java时间格式
    Idea报错Check $M2_HOME environment variable and mvn script match.
    新博客
    理解jquery的$.extend()、$.fn和$.fn.extend()
    在vs code中使用ftp-sync插件实现客户端与服务器端代码的同步
    js字符串倒序
  • 原文地址:https://www.cnblogs.com/cc-Cheng/p/3315211.html
Copyright © 2020-2023  润新知