iOS開發-Day13-OC基礎、面向對象

開始學習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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章