開始學習OC了
1、OC語法簡介
C語言是一門面向過程的語言,OC是在C語言的基礎上,增加了一層最小的面向對象語法,爲什麼說是最小的面向對象語法呢?因爲OC把一些比較複雜的面向對象語法都去掉了,剩下的都是面向對象的精華,因此OC是一門面向對象的語言,而且會比C++簡單很多。因爲OC是基於C語言的,所以完全兼容C語言,也就是說我們在開發iOS程序過程中,可以在OC代碼中混入C語言代碼,甚至是C++代碼。
在Java中,爲了防止兩個類名相同的類衝突,你可以將這2個類放在不同的包裏面。OC中並沒有”包”的概念,也就是沒有命名空間機制,取而代之的是開發人員給類名加上前綴,使用前綴可以有效的防止類名衝突。比如NSString(OC中的字符串類)、NSArray(OC的數組類),它們的前綴都是NS
前面說到,OC代碼中是可以混入C語言、C++代碼的,而C語言和C++作爲一門編程語言,都有自己的關鍵字。爲了防止跟C語言、C++關鍵字衝突,OC的關鍵字都以@開頭。
新建一個工程:
//import是include的改進,可以避免重複包含
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
//自動釋放池
@autoreleasepool {
//NSlog參數格式化字符是NSString的對象
//NSlog的佔位符%@用以輸出對象,其他的和C一致
NSLog(@"Hello, World!");
}
return 0;
}
2、面向對象(OOP)
面向對象無外乎就是那幾個概念的集合
類、對象、實例、方法、消息
新建一個類
新建一個工程,系統會自動創建main.m文件的,這時候,我們右鍵項目,選擇New File..
再選擇OS X中的Source,在選擇Cocoa Class,點擊下一步設置類名,確定即可類在接口@interface中定義
@interface Car : NSObject
-(void)run;
@end
- 類在接口中實現
@implementation Car
- (void) run
{
NSLog(@"car is runing");
}
@end
- 成員變量
@interface Car : NSObject
{
//@private 私有成員,只有當前類可以訪問;
//@protected 受保護成員,只有當前類或子類可以訪問(如果沒有添加任何修飾則默認爲@protected);
//@public 公共成員,所有類均可訪問;
int _wheels; // 輪子個數
int _speed; //時速
//注意:只能定義不能賦值,因爲這裏只是在做聲明操作,不能賦值的
}
//定義方法
//-:實例方法,+:類方法
//格式:方法說明 (返回類型) 方法名 : (參數類型)參數名稱
-(void)run;
@end
3、實例
- OC中實例化一個對象的方式是:
Person *person1 = [[Person alloc] init];
4、方法
同時,OC中的方法調用方式:
對象方法:[對象變量 方法名 參數] 類方法:[類名 方法名 參數]
5、便利初始化函數和便利構造器
- 爲了減輕賦初值的麻煩可以重寫寫初始化函數以及構造器
//@interface
@interface Student : NSObject
{
@public
NSString *_name;
int _age;
NSString *_hobby;
NSString *_addr;
}
-(void)sayHi;
+(Student *)studentWithName:(NSString *)newName andAddr:(NSString *)newAddr andAge:(int)newAge andHobby:(NSString *)newHobby;//+類方法
@end
//@implementation
#import "Student.h"
@implementation Student
-(Student *)initWithName:(NSString *)newName andAddr:(NSString *)newAddr andAge:(int)newAge andHobby:(NSString *)newHobby//便利初始化函數
{
self = [super init];
if (self) {
_name=newName;
_addr=newAddr;
_age=newAge;
_hobby=newHobby;
}
return self;
}
+(Student *)studentWithName:(NSString *)newName andAddr:(NSString *)newAddr andAge:(int)newAge andHobby:(NSString *)newHobby//便利構造器(利用了初始化函數)
{
Student *stu = [[Student alloc]initWithName:newName andAddr:newAddr andAge:newAge andHobby:newHobby];
return stu;
}
-(void)sayHi
{
NSLog(@"my name is %@ live in %@ my age is %d i like %@",_name,_addr,_age,_hobby);
//%@用以輸出字符串對象
}
@end
//main.h
#import <Foundation/Foundation.h>
#import "Student.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
Student *stu=[Student studentWithName:@"zhangsan" andAddr:@"nanjin" andAge:19 andHobby:@"football"];
[stu sayHi];
}
return 0;
}
//然後今天一直在練習便利初始化函數和構造器,所以其他的練習我就不放上來了
-
-
-15.7.30
-15.8.11