OC 的語法知識其實(shí)有蠻多俯渤,以下知識基礎(chǔ)的一部分.
目錄部分:
@ 符號
在 OC 語言中,絕大部分的關(guān)鍵字使用的 @ 符號開頭啰劲。記住這是一個(gè)規(guī)則就好了迁客。
字符串
在 Java 中字符串和 C 語言中字符串定義的方式是一樣的。
但是在 OC 中的字符串的定義是需要添加 @ 的摔敛,在OC 中字符串類型使用的是 NSString 廷蓉,相對而言添加一個(gè) NS 前綴。
Java: "Android" "Java"
OC: @"OC" @"iOS"
//比如定義一個(gè)變量
NSString *name = @"小明";
NSLog 日志輸出
OC 中的日志輸出對象為 NSLog.
語法:NSLog(字符串); —— 表示需要打印的日志马昙。
Java 中的 Log 和這個(gè)對標(biāo)的桃犬,但是目前還沒有發(fā)現(xiàn) NSLog 有和 Log 日志等級關(guān)系的定義售貌。
//簡單使用
NSLog(@"Hello world, OC");
//高級使用
NSLog(@"1+1=%d",2)
#import導(dǎo)入指令
“#”表示的是一個(gè)預(yù)處理指令。
這個(gè)指令的作用:將文件的內(nèi)容在預(yù)編譯的時(shí)候拷貝寫指令的地方.
簡單的原理:#import指令在包含文件的時(shí)候,底層會先判斷這個(gè)文件是否被包含 如果被包含就會略過 否則才會包含.
//導(dǎo)入系統(tǒng)的相關(guān)的使用的是“<>”
#import <Foundation/Foundation.h>
//導(dǎo)入其他非系統(tǒng)的類或者頭文件使用的是 ""
#import "Person.h"
類
什么是一個(gè)類
面向?qū)ο笳Z言定義基本上都是一樣疫萤,這個(gè)定義 Java 和 OC 基本上沒差颂跨。
描述具有相同特征和行為事物的集合。
OC 怎么創(chuàng)建一個(gè)類
OC 的類通常是有兩個(gè)文件扯饶,一個(gè)是 .h 文件恒削,一個(gè)是.m 文件
.h 頭文件
表示一個(gè)類的聲明
語法格式:
@interface 類名 : NSObject
{
聲明特征(變量)
}
-聲明方法
@end
說明
- interface 在 Java 中表示的是接口的意思,但是在 OC 表示的是頭文件的標(biāo)識尾序。
- @end 作為表示當(dāng)前這個(gè)類聲明完成钓丰。
- “ :” 表示繼承的關(guān)系,和 Kotlin 有點(diǎn)類似每币。
- NSObject 和 Java 是一樣的携丁,所有的對象創(chuàng)建時(shí)會默認(rèn)自動生產(chǎn)一個(gè)這樣的繼承關(guān)系,Java 是不需要顯示出來的兰怠,但是 OC 會顯示出來梦鉴。
@interface Person : NSObject
{
int age;
NSString *name;
BOOL isBoy;
}
@end
.m 實(shí)現(xiàn)文件
表示一個(gè)類的實(shí)現(xiàn)
語法定義
@implementation 類名
{
特征和變量
}
方法實(shí)現(xiàn)
@end
注意事項(xiàng):
- 在 .m 文件中定義的變量為私有變量,在其他的類是不能調(diào)用到的揭保。
- 在 .m 中定義的方法在 .h 文件中如果沒有定義就不能被外部的類所調(diào)用肥橙。
- 如果在 .h 文件中聲明了一個(gè)方法,但是在 .m 文件中沒有實(shí)現(xiàn)這個(gè)類秸侣,可編譯通過存筏,不可以運(yùn)行。
@implementation Person
{
//錢肯定只有自己能夠訪問
float money;
}
@end
與 Java 語言相比味榛,類的定義在 OC 中顯得略有麻煩椭坚。
類生成對象的方式
類生成對象在 OC 有好幾種常見的方式,這里只闡述兩種比較常用的方式:
//第一種:
Person *person = [Person new];
//第二種
Person *person = [[Person alloc] init];
其中 alloc 表示分配內(nèi)存空間搏色, init 表示初始化成員變量善茎。
這兩種方式完全等價(jià)。
變量
語法
在 @interface 中定義的變量是在 { } 中继榆,并且需要在變量頭部聲明 @public 才可以在 .m 和作為對象調(diào)用巾表。
在 @implementation 中定義的語法只能在 .m 中使用。
代碼
.h 中:
@interface Person : NSObject
{
@public // 聲明這些變量可以被訪問
int _age;
NSString *_name;
BOOL _isBoy;
}
@end
.m 中:
@implementation Person
{
//錢肯定只有自己可以訪問了
int moeny;
}
@end
調(diào)用
//這個(gè)是和 C 語言兼容過來的略吨。
Person *person = [Person new];
person->_name = 3;
方法
調(diào)用角度分為兩種:一種是類方法集币;一種是對象方法。
這個(gè)地方對標(biāo)的是 Java 中的靜態(tài)方法和類方法翠忠。
從方法本身定義出發(fā)鞠苟,也是分為兩種:一種是無參方法和有參方法。
和所有其他的程序語言一樣。
方法的構(gòu)成的要素:(與語言無關(guān))
- 返回類型
- 方法名稱
- 參數(shù)(可有可無)
無參對象方法
語法
-(返回類型)方法名稱;
這個(gè)語法和 Java 的差異還是蠻大的当娱。
方法申明:
@interface Person : NSObject
{
int age;
NSString *name;
BOOL isBoy;
}
- (void) eat;
@end
方法實(shí)現(xiàn):
@implementation Person
{
//錢肯定只有自己能夠訪問
float money;
}
@end
- (void) eat{
NSLog(@"人是鐵飯是鋼");
}
調(diào)用方法
[對象 方法名]
Java 中的都是點(diǎn)語法 ,但是在 OC 中不是這樣吃既。
//Java對象方法調(diào)用(Java 中不存在類對象的概念,只是為了區(qū)分所以此處表示為對象方法)
Person mPerson = new Person;
mPerson.eat();
//OC 中對象方法調(diào)用
Person *person = [Person new] ;// OC 生成對象的方式
[person eat];
有參對象方法
語法
-(返回值類型)方法名稱:(參數(shù)類型)參數(shù)名稱1 : (參數(shù)類型)參數(shù)名稱2
方法名稱和參數(shù)數(shù)值之間以 “:” 表示分隔跨细。
方法申明:
@interface Person : NSObject
{
@public // 聲明這些變量可以被訪問
int _age;
NSString *_name;
BOOL _isBoy;
}
//無參
-(void)eat;
//有參
-(void)setName:(NSString *)name withAge:(int)age withIsBoy:(BOOL)isBoy;
@end
方法實(shí)現(xiàn):
@implementation Person
{
//錢肯定只有自己可以訪問了
int moeny;
}
-(void)eat{
NSLog(@"人是鐵飯是鋼");
}
/*setName withAge withBoy withIsBoy 這個(gè)整體就是一個(gè)方法名稱鹦倚,至于為
*什么用 withXXX 這是 OC 書寫的一種比較好的習(xí)慣吧。這些變量之間沒有特殊的符號的定義冀惭,除了變量空格就好了震叙。
*/
-(void)setName:(NSString *)name withAge:(int)age withIsBoy:(BOOL)isBoy{
_name = name;
_age = age;
_isBoy = isBoy;
}
@end
調(diào)用方式
這就不用相關(guān)的語言描述了。直接上代碼:
Person *person = [Person new];
// 一個(gè)叫小明散休,3歲的男孩媒楼。
[person setName:@"小明" withAge:3 withIsBoy:YES];
以上基本就是對象方法的全部了
類方法
對象的方法用 “-” 表示。類方法用 “+” 表示戚丸。其他的方式全部和對象方法一致划址。
語法上體現(xiàn)的很簡單。
在 OC 中類方法不能訪問屬性限府。所以一般如果在一個(gè)方法中不需要用到類屬性的關(guān)系就可以使用類方法夺颤,相比而言,類方法的有:
- 節(jié)約空間:不需要生成對象就可以調(diào)用方法
- 提高效率:可以直接通過類訪問方法
方法聲明:
@interface Utils: NSObject
//無參方法
+ (void)start;
//計(jì)算和(有參方法)
+(int)add:(int)num1 andNum2:(int)num2;
@end
方法實(shí)現(xiàn):
@implementation Utils
+ (void)start{
NSLog(@"開始啦....");
}
+ (int)add:(int)num1 andNum2:(int)num2{
return num1 + num2;
}
@end
方法調(diào)用:
//類方法調(diào)用無參方法
[Utils start];
//類方法調(diào)用有參方法
[Utils add: 1 andNum2: 2 ];
以上基本上就是簡單的語法基礎(chǔ)的部分啦谣殊。后續(xù)還會有深入的 OC 學(xué)習(xí)更新拂共,請期待哦。