zoukankan      html  css  js  c++  java
  • iOS之02-第一个OC的类

    OC是一门面向对象的语言,因此它也有类、对象、静态动态方法、成员变量的概念。这讲就来创建第一个OC的类。

    第一个类的源码:

     1 /*
     2  3  类名:Person
     4  属性(成员变量实例变量):体重、年龄
     5  行为(方法):走路、吃
     6  */
     7 
     8 #import <Foundation/Foundation.h>
     9 
    10  //1.类的声明
    11 @interface Person : NSObject
    12 {
    13     @public
    14     int age;
    15     double weight;
    16 }
    17 
    18 - (void) walk;
    19 - (void) eat;
    20 @end
    21 
    22 // 2.类的实现
    23 @implementation Person
    24 // 实现interface中声明的方法
    25 - (void) walk {
    26     NSLog(@"%d岁、%.2lf公斤的人走一段路", age, weight);
    27 }
    28 
    29 - (void) eat {
    30     NSLog(@"%d岁、%.2lf公斤的人在吃东西", age, weight);
    31 }
    32 @end
    33 
    34 int main() {
    35     // 在使用类创建对象之前,会将类加载进内存
    36     Person *p = [Person new];
    37     p->age = 20;
    38     p->weight = 77.0;
    39     
    40     [p eat];
    41     [p walk];
    42     return 0;
    43 }

    1.类的声明(代码11-20行):声明对象的属性行为

    10    //1.类的声明
    11   @interface Person : NSObject
    12   {
    13       @public
    14       int age;
    15       double weight;
    16   }
    17 
    18   - (void) walk;
    19   - (void) eat;
    20   @end

      代码第11行 : NSObject 目的是:让Car这个类具备创建对象的能力

      代码第12-16行 用来声明对象属性(实例变量/成员变量,默认会初始化为0)

        声明对象属性必须在 {...} 之间

        @public让后面所有变量都可以被外部的指针间接访问对象内部成员变量  

          成员变量的常用作用域有3种:

          1> @public 全局都可以访问
          2> @protected 只能在类内部和子类中访问
          3> @private 只能在类内部访问

      代码18、19行 是方法的声明

        方法(行为):方法名、参数、返回值(声明、实现)

          只要是OC对象的方法,必须以减号 - 开头
          OC方法中任何数据类型必须用小括号 (...) 括住
          OC方法中的小括号():括住数据类型

    2、类的实现(代码23-32行):用来实现@interface中声明的方法

    22 // 2.类的实现
    23 @implementation Person
    24 // 实现interface中声明的方法
    25 - (void) walk {
    26     NSLog(@"%d岁、%.2lf公斤的人走一段路", age, weight);
    27 }
    28 
    29 - (void) eat {
    30     NSLog(@"%d岁、%.2lf公斤的人在吃东西", age, weight);
    31 }
    32 @end

      方法的声明请参考 视频iOS之04方法的声明和实现

    3、主函数(代码34-43行)

    34 int main() {
    35     // 在使用类创建对象之前,会将类加载进内存
    36     Person *p = [Person new];
    37     p->age = 20;
    38     p->weight = 77.0;
    39     
    40     [p eat];
    41     [p walk];
    42     return 0;
    43 }

      在OC中想执行一些行为,就写上一个中括号[行为执行者 行为名称]

      代码36行 利用来创建对象

        执行了Car这个类的new行为来创建新对象

        定义了一个指针变量p,p将来指向的是Car类型对象

        [Car new]每次都会创建出一个新对象,并且会返回新对象本身(新对象的地址)

      代码37、38行p所指向对象的属性赋值

      代码37、38行 给p所指向对象发送一条run信息

      每个对象中都有一个isa的指针,这个指针就指向对象所对应的类

    4、OC对象方法和函数的区别

      方法
       1> 对象方法都是以减号'-'开头
       2> 对象方法的声明必须写在@interface@end之间
         对象方法的实现必须写在@implementation和@end
       3> 对象方法只能由对象调用
       4> 对象方法对象所有
     
      函数
       1> 函数能写在文件中的任意位置(除了在对象声明部分(@interface和@end之间)),函数归文件所有
       2> 函数调用不依赖于对象
       3> 函数内部不能直接通过成员变量访问某个对象的成员变量

  • 相关阅读:
    2.6.2.MySQL主从复制的原理
    2.4.5 MySQL InnoDB重做与回滚介绍
    PRML读书笔记_绪论曲线拟合部分
    python3_字符串
    PRML读书笔记_绪论
    python3_列表、元组、集合、字典
    linux_软件安装
    shell获取帮助
    linux_查看磁盘与目录容量
    linux_压缩解压命令(zip/tar)
  • 原文地址:https://www.cnblogs.com/gfxxbk/p/5269825.html
Copyright © 2011-2022 走看看