OC語法基本使用

首先來了解一下:

1.面向過程與面向對象

1.1面向過程編程

    什麼是面向過程?

Procedure,流程;

主幹流程和分支流程;

子模塊,代碼的複用;

特點:所有的工作,一個人幹,不利於工程協作;

1.2 類和對象

 1.2.1 從生活邏輯

┏    ┓         ┏  對象   ┓

   人           ┃ 喬布斯          庫克    

   電腦         ┃ 你桌子上那臺    我桌子上這臺

 

類class(不佔用內存) 一個類的實例 instance(佔內存)    

1.2.2從封裝角度

結構體:自定義的數據類型,封裝成員變量,屬性

函數:模塊,封裝子過程,方法

類:屬性和方法的結合,同時封裝了屬性和方法(行爲)

1.2.3從語言角度

  類:類型

  對象:變量,可讀可寫容器;常量,只讀不寫的容器;

1.2.4 從官方定義

 類:一種數據抽象

 對象:一種數據具象

 

2.OC語言與C語言的聯繫

2.1文件後綴名 

c語言

oc 語言:*.m

2.2#import的作用

相當於#include,但比#include 更加智能,能避免頭文件重複包含

-》 NSLog函數和printf函數的區別

自動換行

有時間戳前綴 

2.3OC的字符串和 C 語言字符串的區別

@符號開始的字符串是 OC 的;

無@符號前綴的則爲 C 的;

OC 字符串的代表符號是%@;

C 字符串的代表符號底%s;

OC字符串是一個對象;空間在堆區

C 語言字符串只是數據;空間在棧區

 

eg.oc語言簡單使用(輸出語句)

  //相當於#include,但比其更加智能,避免頭文件的重複包含
#import <Foundation/Foundation.h>

int main(int argc, const char * argv[])
{
    //oc語言的關鍵詞以@符號開頭,@符號讀作at for
  @autoreleasepool {
    NSString* myName = @"hello!";
    //NSLog的輸出,在程序的後臺,對應於前臺,在 iOS 中 UI界面是前臺,Command Line Interface是後臺
      NSLog(@"Hello, World!");
    NSLog(@"Hello, %@,%@.",myName,@"張三");
    NSLog(@"Hello, %s.","hello");
    
  }
    return 0;
}

 eg.oc語言創建一個類(方式一)

#import <Foundation/Foundation.h>
  //類的聲明
@interface Person : NSObject{
    NSString* nsName;
    //char* name;
    int age;
}
  //'-'號開始的方法是實例方法;
  //'+'號開始的方法是類方法
- (void)setAge:(int)_age;

@end


  //類的實現
@implementation Person

- (void)setAge:(int)_age
{
  age = _age;
}

@end


int main(int argc, const char * argv[])
{

  @autoreleasepool {
      //類的使用
    Person* person = [[Person alloc] init];
    [person setAge:20];

  }
    return 0;
}

 eg.oc語言創建一個類(方式二)

(1)頭文件Person.h

 //類的聲明文件,類的接口文件
#import <Foundation/Foundation.h>

@interface Person : NSObject {
   //@public//公開的,訪問權限最大//所有的對象都能訪問該屬性
  //類的屬性//要用大括號括起來
  int _number;//保存學號信息
  //@protected//保護的,訪問權限中庸//只有自己和子類能訪問該屬性
  NSString* _name;//下劃線開始的變量名作爲類的屬性變量,和形式參數相區別,這是工程習慣,代表該變量是對象內部的空間
  //@private//私有的,訪問權限最小//只有自己能訪問該屬性
  int _age;
}
  //中綴函數名方式
  //id 相當於void* 
  //id是泛型的對象指針類型
- (id)initWithNumber:(int)aNumber
             andName:(NSString*)aName
              andAge:(int)aAge;

  //類的方法//不能用大括號
- (void)setNumber:(int)aNumber;
- (int)number;

- (void)setAge:(int)aAge;
- (int)age;

- (void)setName:(NSString*)aName;
- (NSString*)name;

@end

 (2)實現文件Person.m

//需要包含頭文件
#import "Person.h"

@implementation Person

- (id)initWithNumber:(int)aNumber
             andName:(NSString*)aName
              andAge:(int)aAge
{
    //super代表父類
    //父類在幫對象初始化共同的繼承的變量
  if (self = [super init]) {//nil表示空對象
    //對象初始化自己特殊的變量
    _number = aNumber;
    _name = aName;
    _age = aAge;
  }

  //self是一個指向對象自己的對象指針,該指針由 NSObject 提供
  return  self;
}
  //對象的自描述方法,也是一個由 NSObject 遺傳的隱式方法,
  //我們可以按照自己的意願,重寫該方法(也即覆蓋父類方法)
- (NSString *)description{
  return [NSString stringWithFormat:@"學號:%d,姓名:%@,年齡:%d",_number,_name,_age];
}


- (void)setNumber:(int)aNumber{
    //工程健壯性規範,加快運行時的效率
//  if (_number != aNumber) {
//     _number = aNumber;
//  }
//對於非對象屬性,檢查可選
    _number = aNumber;
}

- (int)number{

  return _number;
}


- (void)setName:(NSString*)aName{
    //針對對象類型的屬性,在設置值之前,必須檢查是否爲同一對象(指針)
  if(_name != aName){
    _name = aName;
  }
}

- (NSString*)name{

  return _name;
}


//setter方法,用於寫入對象內部的屬性數據
- (void)setAge:(int)aAge{
    //設置對象內部的屬性值
  _age = aAge;
}
//getter方法,用於讀取對象內部的屬性數據
- (int)age{
    //返回對象內部的屬性值
  return _age;
}
@end

 (3)main.m文件

#import <Foundation/Foundation.h>
 //導入類的頭文件
#import "Person.h"

int main(int argc, const char * argv[])
{

  @autoreleasepool {
      //用類作爲模板來創建對象
      //對象的數據類型是指針類型,並且它是指向堆空間的指針類型
      //OC中,所有對象,都用指針來引用
    Person * xiaoLi = [[Person alloc] initWithNumber:20 andName:@"小李" andAge:28];
      //NSLog(@"xiaoLi對象的自描述信息爲:%@",[xiaoLi description]);
      NSLog(@"xiaoLi對象的自描述信息爲:%@",xiaoLi);
      //寫入 xiaoLi的屬性信息
      //在 OC中必須通過方法,對對象屬性進行操作,以便保護對象的封裝性
      //[xiaoLi setName:@"小李"];
      //方法調用,又稱爲發送消息,對象接受消息
     //    [xiaoLi setAge:28];
     //    [xiaoLi setNumber:13];
     //[xiaoLi initWithNumber:20 andName:@"小李" andAge:18];
    NSLog(@"xiaoLi name:%@",[xiaoLi name]);
    NSLog(@"xiaoLi age:%d",[xiaoLi age]);
    NSLog(@"xiaoLi number:%d",[xiaoLi number]);
    Person* p=[[Person alloc] init];
    [p setNumber:22];
    [p setName:@"哈哈"];
    [p setAge:24];
    
    NSLog(@"姓名:%@ 學號:%d 年齡:%d",[p name],[p number],[p age]);
    
  }
    return 0;
}

 

發佈了24 篇原創文章 · 獲贊 2 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章