Objective-C学习之旅 第三篇

Objective-C学习之旅 第三篇

Objective-C 类声明,定义,实例,初始化

  1. 类声明

    //类声明的编译处理指令以@interface开始,以@end结尾,在这之间代码便是类变量的定义和方法的声明。
    //类的声明和定义比其他语言复杂,这会让刚开始学习Objective-C的人非常困惑
    //准确的说,其他语言如Java只需定义类而不用声明,而Objective-C需要先声明再定义。
    @interface 类名 : 父类名 {
        声明成员变量
        ...
    }
    声明方法
    @end

    实例:

    @interface TestCoop : NSObject {
    //声明成员变量
        int iMonth;
        int iYear;
        int iDay;
    }
    //声明方法
    
    - (void) setYear: (int) iYear;
    - (void) primalSetData: (int)iYear :(int)iMonth :(int)iDay;
    - (void) setData: (int)Year iMonth:(int)iMonth iDay:(int)iDay;
    - (void) displayDateInfo;
    
    @end
    /*说明:
       前面的短线/- 表示这是Objective-C方法的声明,用来区分函数原型(C语言中)与(Objective—C中)方法声明的方式。
       短线后面是方法的返回类型/比如( void) ,位于圆括号中。
       符号"+"的意思是,该方法是objective-c类方法
       符号"-"的意思是,该方法是objecitve-c实例方法.
    */
  2. 类实现

    //Objective-C将类的声明和定义完全分开,在类的声明中,只能定义实例变量和方法名及类型,
    //具体的实现要用到@implementation这个编译处理指令中进行。
    
    @implementation 类名
    实例方法定义
    ...
    @end

    实例:

    @implementation TestCoop
    - (void) displayDateInfo{
        NSLog(@"Today is: %d.%d.%d\n", iYear, iMonth, iDay);
    }
    //注意:类的方法实现部分函数参数不能和声明部分一样,就是不能和类变量同名,否则会隐藏初始变量。
    //比如下面的参数“year”就不能和声明的中的“iYear”一样
    
    - (void) setYear: (int) year{
        iYear = year;
    }
    
    - (void) primalSetData: (int)year :(int)month :(int)day{
        iYear = year;
        iMonth = month;
        iDay = day;
    }
    
    - (void) setData: (int)year iMonth:(int)month iDay:(int)day{
        iYear = year;
        iMonth = month;
        iDay = day;
    }
  3. 实例化对象

    int main (int argc, const char * argv[]) {
        @autoreleasepool {
             // insert code here...
            //NSLog(@"%d-,%s %@\n", 12, "hel123lo", @"123");
            TestCoop *ptest = [TestCoop new];
            [ptest primalSetData :2009 :03 :05];
            [ptest displayDateInfo];
            [ptest setData:2010 iMonth:06 iDay:06];
            [ptest displayDateInfo];
            [ptest setYear:1987];
            [ptest displayDateInfo];
       }
    
        return 0;
    }
    
  4. 类的初始化

    //cocoa习惯使用alloc和init来创建对象,而不是new
    //使用alloc来分配内存,并使用init来初始化,会将这块内存全部清0,bool型为NO,int型为0,指针为nil
    //上面的创建对象代码改成如下:
    
    TestCoop *ptest = [[TestCoop alloc] init];
时间: 2024-11-25 05:34:49

Objective-C学习之旅 第三篇的相关文章

跟我学习SpringCloud 教程第三篇:注册中心集群篇-b2b2c小程序电子商务

集群环境搭建?了解springcloud架构可以加求求:三五三六二四七二五九第一步:我们新建两个注册中心工程一个叫eureka_register_service_master.另外一个叫eureka_register_service_backup eureka_register_service_master的application.properties配置如下?server.port=7998 eureka.client.register-with-eureka=false eureka.cli

【PostgreSQL学习之旅】第一篇:Linux和Windows下安装PostgreSQL9.4

一.简介 PostgreSQL是目前世界上最丰富的数据类型的支持,其中有些数据类型可以说连商业数据库都不具备, 比如 IP 类型和几何类型等:其次,PostgreSQL 是全功能的自由软件数据库,很长时间以来,PostgreSQL 是唯一支持事务.子查询.多版本并行控制系统(MVCC).数据完整性检查等特性的唯一的一种自由软件的数据库管理系统. 二.Linux下安装 1) 环境:RedHat Enterprise 6.5 x64(2.6.32-431.el6.x86_64) PostgreSQL

小豆包的学习之旅:入门篇

小豆包是本文的主人公,它是一个机器人.星球大战里面有2个非常出色的机器人一个是3PO,一个是R2. 我们也给这个机器人取了个名字,叫小豆包,代号FR2.不许侵犯它的署名哦. 小豆包是个多好的孩子啊,外在热情开朗,充满了好奇心和求知欲.这不,他开始了自己的SLAM之旅. 小豆包的新装备 运动模型 观测模型 蒙特卡罗算法 激光VS视觉 小豆包的新装备 小豆包这下高兴啦,因为它终于从研究人员的脑海中.图纸中走出来了,成为了一个真实的存在. 一身装备也算是价格不菲了,先锋Pioneer3-AT,北阳激光

cocos2d-x新手学习之Helloworld(第三篇)[版本号:cocos2d-x-3.1.1]

上篇中,能够正常执行NDK中的样例.可是由cocos2d-x生成的项目,不能编译成功.上一篇戳这里: http://blog.csdn.net/xjjjjjjjjjjj/article/details/29382201 1.创建新项目 打开CMD,输入命令: cocos new Helloworld -p com.hello -l cpp -d E:\WorkSpace\cocos2d-x\l2\ 其他平台创建项目戳这里: http://cocos2d-x.org/wiki/How_to_Sta

《Mycat学习笔记》 第三篇. MySql 主从同步异常后,主从切换

1)系统环境说明 MySql 5.5 主从节点 127.0.0.1:3306   主结点,为验证主从切换效果,手动停止服务 127.0.0.1: 3307    从结点 1 127.0.0.1:338     从结点 2 ,为验证主从切换效果,在主结点停止后,新增两个记录. MyCat 1.5 schema.xml 配置 具体配置说明,参考上篇: <Mycat学习笔记> 第二篇. MySql 读写分离与日志分析——主从多结点 <dataHost name="localhost1

WCF学习之旅—第三个示例(二十七)

一.前言 通过前面二十几个章节的学习,我们知道了什么是WCF:WCF中的A.B.C:WCF的传输模式:WCF的寄宿方式:WCF的异常处理.本文综合应用以上知识点,一步一步写一个小的WCF应用程序——书籍管理系统(BookMgr). 这个示例就是一个非常简单的书籍管理系统,功能有:查询.修改.新增.删除(不包括安全.优化等相关问题).异常处理.WCF的增删改查和WinForm相差无几.WCF只是把具体“实现”写在“服务端”,而“调用”放在了“客户端”. 二.BookMgr说明 1)Demo的 “服

Python学习之旅(三十八)

Python基础知识(37):访问数据库(Ⅱ) 因临近考试,本人即将进入复习阶段,从明天12月19号至2019年的1月二十多号暂停更新 二.MySQL MySQL是Web世界中使用最广泛的数据库服务器.SQLite的特点是轻量级.可嵌入,但不能承受高并发访问,适合桌面和移动应用.而MySQL是为服务器端设计的数据库,能承受高并发访问,同时占用的内存也远远大于SQLite. 可以直接从MySQL官方网站下载最新的Community Server 5.6.x版本. 由于Python的DB-API定义

2019年暑假学习进度报告第三篇

一. 本周做了什么 本周是大一暑假第三周,正在利用书学习 Java 基础知识,学习了第一章 Java 语言概述和第二章 Java 编程基础. 学习时间大约有11小时,敲代码大约有6小时. 二. 下周准备做什么? 继续跟书学习 Java. 三. 本周遇到的问题? 1. 书中的问题:class path是什么,classpath 就是 class 的 path ,也就是类文件(*.class的路径). 2. 200不能给 byte 赋值,byte 的范围是-128~127. 3. boolean 报

Java学习之旅基础知识篇:数组及引用类型内存分配

在上一篇中,我们已经了解了数组,它是一种引用类型,本篇将详细介绍数组的内存分配等知识点.数组用来存储同一种数据类型的数据,一旦初始化完成,即所占的空间就已固定下来,即使某个元素被清空,但其所在空间仍然保留,因此数组长度将不能被改变.当仅定义一个数组变量(int[] numbers)时,该变量还未指向任何有效的内存,因此不能指定数组的长度,只有对数组进行初始化(为数组元素分配内存空间)后才可以使用.数组初始化分为静态初始化(在定义时就指定数组元素的值,此时不能指定数组长度)和动态初始化(只指定数组