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;
}