初识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)width:(int)high;

- (int)retBulk:(int)length:(int)width:(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)width:(int)high{

 //函数功能

 self->length=length;

 self->width=width;

 self->high=high;

 printf("*****\n");

 }

 */

-(int)retBulk:(int)length:(int)width:(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("\n");

}

@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("#########\n");

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

    //Cube * d = [Cube new];

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

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

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

    

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

    Cube * cube1 = [Cube new];

    Cube * cube2 = [Cube new];

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

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

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

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

    

    

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

    Cube * d4 = [Cube new];

    //[d4 print];

 

    printf("\n");

    

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

    Rectangle *r1 = [Rectangle new];

    Rectangle *r2 = [Rectangle new];

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

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

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

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

 

    return 0;

}

 

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

posted @ 2015-12-13 19:17  守木  阅读(88)  评论(0编辑  收藏  举报