(区别于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;
}
************