初識Objective-C,objectivec
(區別於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,表示一個目標的指標(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;
}
************