• 初识Objective-C


    (区别于Java的学习,欧阳坚老师视频学习笔记)

    1,OC中,关键字都由@开始(为避免和C、C++冲入冲突),如@class,@interface,@implementation,@public……

    2,for(xx in xx),BOOL,YES,NO。

    3,基类—NSObject—单继承,接口—支持接口协议—@protocol,接口方法可选实现,使用接口可实现多继承,支持多态、静态类、异常(@try,@catch,@finally),所有的函数都是虚函数。

    4,id类型:OC中,每一个目标都可以表达成id类型,范性,可以认为是NSObject *或者void *(任何指针类型)。

    5,nil:等同于null,表示一个目标的指针(空指针)。

    6,OC类分为 2 个文件,一个是.h,一个是.m文件。.h是类声明(函数字段、函数声明),. m存放类的具体实现。

    类声明用关键字@interface  @end来声明。

    类实现用关键字@implementation  @end来实现。

    如果声明和实现一个类的函数,需要使用+或-来用在函数开始:+表示类的方法(静态方法),-表示对象的方法(动态方法)。

    <1> 类声明 <Dog.h>

    @interface Dog : NSObject{

      //只能写字段、属性

    }

      //写函数声明

    @end

    <2> 类实现 <Dog.m>

    #import "Dog.h"

    @implementation Dog

      //写函数实现

    @end

    7,import 和 include的区别

    #include 包含头文件的缺点是一个头文件可能被包含多次

    #import 优点是同一个头文件只能被包含一次 

    #ifndef _HEAD_H_

    #define _HEAD_H_

    #endif

    //C/C++包含头文件的格式

    8,创建/销毁对象

    //创建对象

    Dog * dog = [Dog malloc];

    //初始化构造函数

    [dog init];

    //销毁对象

    [dog release];

    9,OC变量声明

    @public,@pretected(缺省,默认,保护类型),@private

    OC中函数全是public类型(用另外的方法可以实现private,私有化)

    10,所有的OC类、接口声明必须带 * ,这里 * 既代表指针也代表引用。

    OC:Dog * myDog;

    这里的 * 既表示真正的智者,也表示引用,可以通过 myDog->dog 或者 myDog.dog 这些方法来访问。

    11,OC累中定义函数一般不称为函数,叫消息。

    12,方法定义:

    - (int)f:(int)x;

    “-”表示对象方法,“int”表示返回值,“f”表示函数名,第二个“int”表示参数类型,多个参数之间用“:”隔开,冒号属于函数名的一部分,并且第二个冒号:前面必须有一个空格。

    ************

    <demo.h>

    #import <Foundation/Foundation.h>

    //立方体类声明

    @interface Cube : NSObject{

        //@public

        int length;

        int width;

        int high;

    }

    //- (void)setter:(int)length:(int)(int)high;

    - (int)retBulk:(int)length:(int)(int)high;

    - (void)print;

    @end 

    //长方形类声明

    @interface Rectangle : NSObject{

        //@public

        float len;

        float w;

    }

    - (float)retArea:(float)len:(float)w;

    - (float)retCirc:(float)len:(float)w;

    @end

    ************

    <demo.m>

    //

    //  demo3.m

    //  demo3

    //

    //  Created by qianfeng on 15/11/30.

    //  Copyright © 2015年 qianfeng. All rights reserved.

    //

    #import "demo3.h"

    //立方体类实现

    @implementation Cube

    /*

     -(void)setter:(int)length:(int)(int)high{

     //函数功能

     self->length=length;

     self->width=width;

     self->high=high;

     printf("***** ");

     }

     */

    -(int)retBulk:(int)length:(int)(int)high{

        int bulk=1;

        bulk = length * width * high;

        return bulk;

    }

    -(void)print{

        int n[10],i,j,k,tmp;

        for(i=0;i<10;i++){

            scanf("%d",&n[i]);

        }

        for(i=0;i<10-1;i++){

            for(j=0;j<10-i-1;j++){

                if(n[j] > n[j+1]){

                    tmp = n[j];

                    n[j] = n[j+1];

                    n[j+1] = tmp;

                }

            }

        }

        for(k=0;k<10;k++){

            printf("%d ",n[k]);

        }

        printf(" ");

    }

    @end

      

    //长方形类实现

    @implementation Rectangle

    - (float)retArea:(float)len:(float)w{

        int a=1;

        a=len*w;

        return a;

    }

    - (float)retCirc:(float)len:(float)w{

        int c=0;

        c=2*len+2*w;

        return c;

    }

    @end

    ************

    <main.m>

    #import <Cocoa/Cocoa.h>

    #import "demo3.h"

    int main(int argc, const char * argv[]) {

        //printf("######### ");

        //NSLog(@"Hello, World!");

        //Cube * d = [Cube new];

        //[d setter:1 :2 :3];

        //NSLog(@"%d%d%d ",d->length,d->width,d->high);

        //printf("%d%d%d ",d->length,d->width,d->high);

        

        //创建两个立方体对象,长宽高分别为4、5、6和7、8、9,问,两个立方体的体积是多少

        Cube * cube1 = [Cube new];

        Cube * cube2 = [Cube new];

        NSLog(@"第 1 个立方体的体积为:%d ",[cube1 retBulk:4 :5 :6]);

        NSLog(@"第 2 个立方体的体积为:%d ",[cube2 retBulk:7 :8 :9]);

        //printf("第 1 个对象到体积为:%d ",[d1 getter:4 :5 :6]);

        //printf("第 2 个对象到体积为:%d ",[d2 getter:7 :8 :9]);

        

        

        //从终端输入十个数,按从大到小的顺序输出

        Cube * d4 = [Cube new];

        //[d4 print];

        printf(" ");

        

        //创建两个长方形,长和宽,分别是6、7和4.5、2.3,求两个长方形面积和周长

        Rectangle *r1 = [Rectangle new];

        Rectangle *r2 = [Rectangle new];

        NSLog(@"第 1 个长方形面积为:%.2f ",[r1 retArea:6 :7]);

        NSLog(@"第 1 个长方形周长为:%.2f ",[r1 retCirc:6 :7]);

        NSLog(@"第 2 个长方形面积为:%.2f ",[r2 retArea:4.5 :2.3]);

        NSLog(@"第 2 个长方形周长为:%.2f ",[r2 retCirc:4.5 :2.3]);

        return 0;

    }

    ************

  • 相关阅读:
    java基础-集合笔记
    Spring工具类
    XStream的基本使用
    java之路径问题
    Vue 动态组件渲染问题分析
    watch案例解析(element-ui el-select 无法选中问题剖析)
    v-if案例解析(element-ui form-item 结合 v-if 动态生成rule规则表单元素,表单无法验证问题剖析 )
    Vue 虚拟Dom 及 部分生命周期初探
    Android仿苹果版QQ下拉刷新实现(二) ——贝塞尔曲线开发"鼻涕"下拉粘连效果
    AngularJs(SPA)单页面SEO以及百度统计应用(下)
  • 原文地址:https://www.cnblogs.com/arlenliu/p/5008188.html
Copyright © 2020-2023  润新知