OC-hello, world

来源:http://www.cnblogs.com/wang-biao/archive/2016/07/12/5662176.html
-Advertisement-
Play Games

你好, 世界 <!--EndFragment--> <!--EndFragment--> <!--EndFragment--> <!--EndFragment--> <!--EndFragment--> <!--EndFragment--> <!--EndFragment--> 【寫在開頭:】 『關 ...


你好, 世界

----------------------------

--1-- Xcode創建OC項目
1.1 OC命令行項目
--2-- NSLog函數和@符號
2.1 NSLog的介紹
2.2 NSLog使用方法
2.3 NS首碼的含義
2.4 @符號
--3-- OCC差異學習
3.1 源文件對比
3.2 基本語法對比
3.3 OC新增的數據類型介紹
3.4 OC中的新增異常捕獲方法
--4-- 面向對象
4.1 編程的實質
4.2 面向對象的基本概念
--5-- 類和對象
5.1 類和對象
5.2 類的聲明和實現
5.3 對象的存儲細節

----------------------------

 

 

【寫在開頭:】

『關於hello, world的由來,在C語言的博客中已經說了,在此,同樣是使用這句話,來向iOS的學習之路開一個頭。

蘋果於2014年6月發表了swift。2015年6月8日,在WWDC2015上宣佈,Swift將開放源代碼,包括編譯器和標準庫。

但其Cocoa和Cocoa Touch等框架及現在很多公司的iOS程式還是以OC編寫的所以,學習OC是必要的。

註意:

OC並不是一門全新的語言

OC完全相容C語言

可以在OC代碼中混入C語言代碼,甚至是C++代碼

可以使用OC開發Mac OS X平臺和ios平臺的應用程式

Objective-C,通常寫作ObjC或OC,較少用Objective C或Obj-C,是擴充C的面向對象編程語言。它主要使用於Mac OS X和GNUstep這兩個使用OpenStep標準的系統,而在NeXTSTEP和OpenStep中它更是基本語言。

 

Objective-C是面向對象的語言 

由布萊德·考克斯(Brad Cox)基於Smalltalk改進而來 遵從ANSI C標準C語法,同時使用了Smalltalk的方法,在運行時可以靈活處理所有情,運行時(runtime)非常靈活

   Dynamic Binding 動態綁定 

   Dynamic Typing  動態檢查 

   Dynamic Linking 動態鏈接 

 

--1-- Xcode創建OC項目

1.1 OC命令行項目

使用Xcode快速創建項目:

1)選擇項目類型

 

2)填寫相應的項目信息

創建完成-->

 

 

--2-- NSLog函數和@符號 

2.1 NSLog的介紹

NSLog是cocoa的框架中提供的一個函數

NSLog的定義

NSLog定義在NSObjcRuntime.h

FOUNDATION_EXPORT void NSLog(NSString *format, ...) NS_FORMAT_FUNCTION(1,2);

實際上,NSLog很像printf,同樣會在console中輸出顯示結果,不同的是,傳遞進去的格式化字元是NSString的對象,而不是char *這樣的字元串指針

 

NSLog和printf使用的差異

1)NSLog 會自動換行 ,而printf不會自動換行

2)NSLog會自動輸出時間等項目信息(日誌形式),而pritnf不會輸出調試信息

3)NSLog函數的參數是一個NSString對象,printf是一個字元串指針

 

2.2 NSLog使用方法

        int a = 5;
        float f1 = 2.3f;
        double d1 = 3.14;
        char ch = 'X';
        char *str = "hello";
        
        //能夠運行,說明OC向下相容C
        printf("%d,%.2f,%.2f,%c\n", a,f1, d1, ch);
        printf("%s\n", str);
        printf("----------------\n");
        
        //NSLog格式化輸出
        NSLog(@"%d,%.2f,%.2f,%c", a,f1, d1, ch);
        
        //str是用字元串指針定義的,所以這裡可以用%s格式化輸出,但如果是NSString,則不能這樣格式化輸出字元串
        NSLog(@"--->%s", str);
        printf("----------------\n");
        
        //OC中自己特有的字元串表示方法
        NSString *str1 = @"聽雨";
        //NSLog(@"%s", str1); //不能使用%s輸出
        NSLog(@"%@", str1); //正確輸出
        
        //使用printf能夠列印str1嗎?
        //pritnf("-->%@\n", str1); //不能,NSString是OC特有的C不支持

 

2.3 NS首碼的含義

NSArray,NSString等NS首碼的類、函數歸屬於cocoa Fundation基礎類庫,其"NS”的由來據說是這樣的:喬布斯被蘋果開除後,創立了NeSt公司,而cocoa Fundation基礎類庫就是出自於NeST公司,NeST中的"NS"被作為Fundation中所有成員的首碼。

 

2.4 @符號

OC"@"符號有特殊的用途

1@""; 這個符號表示將一個C的字元串轉化為OC中的字元串對象NSString

2@標識符  OC中大部分的關鍵字都是以@開頭的,比如@interface,@imlementation,@end,@class等。

 

 

--3-- OCC差異學習

3.1 源文件對比

C語言中常見的尾碼是:

  .c .o .out  .h .m

OC中常見的文件有兩種:.h.m的文件

擴展名

源類型

.h

頭文件,頭文件包含方法,屬性的聲明。

.m

類的實現文件,參與編譯的文件,用來實現類中聲明的方法

 

 

 

 

 

3.2 基本語法對比

1)數據類型對比學習

 

2)變數的定義對比

 

3)流程式控制制語句對比

新增:增強型for迴圈,可以快速遍曆數組、字典等集合 

 

3.3 OC新增的數據類型介紹

邏輯型

  1Boolean(布林)

  Boolean 類型指的是用於存儲真值和假值的變數,一般用於程式流程式控制制

  Boolean類型數據允許取值true或false,也可以是0或非0的整數替換true和false,這點和java語言不同

  如C中是10表示真假,OC中也可以用true表示真 false表示假

  用來存放truefalse的結果的變數一般聲明為Boolean

@autoreleasepool {
        Boolean flag = false;
        NSLog(@"%d", flag);  //0
    }

  

  2BOOL也是存放邏輯值的另外一種方法

  BOOL //它的取值是YESNO

  YES   1 

  NO   0 

 BOOL flag2 = NO;

 if (flag2){

 NSLog(@"%d", flag2); //0

 }

  

3.4 OC中的新增異常捕獲方法

        //註意:try  catch並不能檢測所有的錯誤
        @try {
            //可能出錯的語句
        }
        @catch (NSException *exception) {
            //異常捕獲
        }
        @finally {
            //一定要執行的語句
        }

 

  

--4-- 面向對象

4.1 編程的實質

軟體編程就是將我們的思維轉變成電腦能夠識別的語言的一個過程

 

4.2 面向對象的基本概念

面向對象是相對面向過程而言的

面向過程是要關註整個過程的每一步

而對象是關註對象

面向對象程式設計(英語:Object-oriented programming縮寫OOP)是種具有對象概念的程式編程範型,同時也是一種程式開發的方法。它可能包含數據、屬性、代碼方法。對象則指的是的實例。它將對象作為程式的基本單元,將程式和數據封裝其中,以提高軟體的重用性、靈活性和擴展性,對象里的程式可以訪問及經常修改對象相關連的數據。在面向對象程式編程里,電腦程式會被設計成彼此相關的對象。

優點:

大幅度提高軟體項目的成功率

減少維護成本

提高可移植性和可靠性

 

面向對象設計的三個主要特征

封裝性

多態性

抽象性

(還有一個繼承)

 

 

--5-- 類和對象

5.1 類和對象

class

面向對象程式設計(英語:class)是一種面向對象電腦編程語言的構造,是創建對象的藍圖,描述了所創建的對象共同的屬性方法

類的更嚴格的定義是由某種特定的元數據所組成的內聚的包。它描述了一些對象的行為規則,而這些對象就被稱為該類的實例。類有介面和結構。介面描述瞭如何通過方法與類及其實例互操作,而結構描述了一個實例中數據如何劃分為多個屬性。類是與某個層(這裡的層指類型層次中連接時模塊依賴性相同的類的集合,即某環境下可重用性相同的組件的集合。)的對象的最具體的類型。類還可以有運行時表示形式(元對象),它為操作與類相關的元數據提供了運行時支持。

對象object

電腦科學中,對象(英語:object),臺灣譯作物件,是一個記憶體地址,其中擁有,這個地址可能有標識符指向此處。對象可以是一個變數,一個數據結構,或是一個函數。是面向對象Object Oriented)中的術語,既表示客觀世界問題空間Namespace)中的某個具體的事物,又表示軟體系統解空間中的基本元素。

 

如下圖,圖紙是類,汽車是對象

 

類與對象之間的關係

類(Class)一個類由3個部分構成

  類的名稱:類名

  類的屬性:一組包含數據的屬性

  類的方法:允許對屬性中包含的數據進行操作的方法

 

對象(Object)

  是系統中的基本運行實體

  對象就是類類型(class type)的變數

  定義了一個類,就可以創建這個類的多個對象

一個類是具有相同類型的對象的抽象

一般使用“名詞提煉法”來提取類的抽象

 

5.2 類的聲明和實現

1)關於類的幾個名詞

.h:類的聲明文件,用於聲明成員變數、方法。類的聲明使用關鍵字@interface...@end

  註意:.h的方法只是做一個聲明,並不對方法進行實現,也就是說,只是說明一下方法名、方法的返回值類型、方法接收的參數類型而已,並不會編寫方法內部的代碼。

.m: 類的實現文件,用於實現.h中聲明的方法,類的實現使用關鍵字@implementation...@end

 

方法

方法的聲明和實現,都必須以 + 或者 - 開頭

"+" 表示類方法(靜態方法)

"-"  表示對象方法(動態方法)

 

成員變數(實例變數\屬性)

成員變數的作用域有3種:

  @public 全局都可以訪問

  @protected 只能在類內部和子類中訪問

  @private 只能在類的內部訪問

 

2)類的定義分為兩部分:

  1)類的聲明(規定當前類的:類名、屬性、行為)

@interface 類名:父類名
{
    //定義類的屬性
}
    
    //定義類的行為
    
@end //表示結束

 

  2)類的實現(實現類的具體行為)

@implementation 類名
    
    //行為的具體實現
    
@end

 

5.3 對象的存儲細節

用類來創建對象,每個對象在記憶體中都占據一定的存儲空間,每個對象都有一份屬於自己的單獨的成員變數,所有的對象共用類的成員方法,方法在整個記憶體中只有一份,類本身在記憶體中占據一份存儲空間,類的方法存儲於此。

 

Person類

Person.h

//Person類聲明
@interface Person : NSObject
{
    @public //公有屬性
    NSString *_name;
    int _age;
}
-(void)run;

@end

 Person.h

//Person類實現
@implementation  Person
-(void)run{
    NSLog(@"%@正在跑", _name);
}

@end

創建對象及調用其方法

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        
        //創建Person
        Person *person = [Person new];
        person->_name = @"柯南"; //設置成員屬性
        person->_age = 12;
        
        NSLog(@"name->%@, age->%d", person->_name, person->_age);
        [person run]; //調用對象方法
    }
return 0;
}

創建對象[Person new]時做了3件事情

1,申請記憶體空間

2,給實例變數初始化

3,返回空間的首地址

     

問題:

1、申請的空間在記憶體的哪個區?

new時,申請的空間在記憶體的堆區(動態分配的記憶體空間)

初始化時,如果實例變數是基本數據類型,此時初始化為0

如果是OC字元串類型,則初始化為null

     

2、實例變數又保存在什麼地方

實例變數保存在記憶體中的堆區

指針變數p存放在棧區

     

3、對象方法保存在什麼地方

-->代碼區

     

4、為什麼使用[person run];就可以調用方法了?如何調用?

先找到p對應的堆區空間-->找到_isa指針-->找到_isa指向的代碼區空間-->在該空間中找到方法

 

 

【寫在結尾:】

『hello, world』


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一:第一種方法 1:把ipa上傳到一個https類型的網站比如:https://worktile.com 2:更改plist中urrl 3:把plist也上傳到一個htts的網站 4:更改ISS的 4.1添加.ipa MIMI類型是:application/iphone 4.2添加plist MIM ...
  • 本人目前還不是游戲行業的圈內人士,並不懂得,游戲行業的生態圈,也不懂得,所謂的什麼“中國市場環境”。所以不敢發表關於這方面的見解,不過我在這裡想要插一句話,就是我認為啊,行業內,人與人之間還是有分層次的,什麼層次的人,看到什麼層次的東西,不同層次的人對“市場”的理解肯定不一樣,我覺得吧,不要一概而論... ...
  • 本文主要對android6.0源碼中的Camera API2.0下的內置應用Camera2的caputre流程進行分析 ...
  • 實現圖片拉伸有三種方式. 1.直接修改圖片資源 2.通過圖片框可直接修改stretching 3.就是通過代碼的實現 // 可以把NSString 的參數 改成NSArray 數組存放參數 (就是可以修改多個) + (UIImage *)stretchImageWith:(NSString *)im ...
  • 設置一個按鈕的方法就不再贅述了 法一: UIBarButtonItem *oneButton = [[UIBarButtonItemalloc]initWithTitle:@"設置" style:UIBarButtonItemStylePlain target:selfaction:@selecto ...
  • 代碼: - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. self.title=@"頁面調的時候隱藏工具條"; //當跳轉的時候,隱藏工具條 [self.tabB ...
  • 打開終端: 查看Git的版本的終端命令:git —version 輸入:ssh 查看是否已經存在ssh. 如果存在,先將已有的ssh備份,或者將新建的ssh生成到另外的目錄下 如果不存在,通過預設的參數直接生成ssh 生成過程如下: ssh-keygen -t rsa -C [email protected] ...
  • 當我們自定義View的時候,在給View賦值一些長度寬度的時候,一般都是在layout佈局文件中進行的。,比如android:layout_height="wrap_content",除此之外,我們也可以自己定義屬性,這樣在使用的時候我們就可以使用形如 myapp:myTextSize="20sp" ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...