一、類和對象

来源:http://www.cnblogs.com/gnhxsk/archive/2016/01/29/5168152.html
-Advertisement-
Play Games

1.介面部分:對外聲明類的行為和特征(類的定義分為:介面部分和實現部分) ① @interface 介面關鍵字:用於表示這是一個類的介面部分 介面部分功能:是定義類的靜態特征和聲明動態行為 @end 作為結束標誌 對外介面:通過介面就可以在不知道實現的情況下,瞭解這個類有什麼 Person:類名,每


1.介面部分:對外聲明類的行為和特征(類的定義分為:介面部分和實現部分) ① @interface 介面關鍵字:用於表示這是一個類的介面部分      介面部分功能:是定義類的靜態特征和聲明動態行為      @end 作為結束標誌            對外介面:通過介面就可以在不知道實現的情況下,瞭解這個類有什麼        Person:類名,每一個類都要起一個名字。首字母大寫(類:對象的類型)      NSObject:父類 @interface Person: NSObject ②靜態特征:實例變數 ③實例變數必須在花括弧中 ④創建實例變數的時候不能被賦值 ⑤在創建實例變數的時候,實例變數錢加“_”:系統這樣寫;區分; {      ⑤實例變數的可見度      《1》內部:類的實現部分使用實例變數      《2》外部:不在實現部分使用      《3》@public範圍:外部、內部、繼承      《4》@protected(系統預設)範圍:內部、繼承      《5》@private範圍:內部      //添加當前類屬性
     @public//作用範圍是直到下一個結束或者實例變數結束      NSString *_name;      NSInteger _age;        @protected      CGFloat _height;        @private      CGFloat _weight;
}   //動態行為:方法(添加類的行為) - (void)sayHi;   @end 2.實現部分:類行為的具體實現(方法的實現) ①@implementation:關鍵字,表示類的實現部分      Person:類名,表示實現的是哪個類      @end:類 結束實現標誌 @implementation Person   - (void)sayHi{      NSLog(@“Hello World”);
}   @end 3.使用類創建對象。Objective-C中創建的對象,全部放在堆區(對象:類的實例) int main(){      @autoreleasepool{           ①申請空間           保存空間地址           《1》記憶體分配 (alloc方法:用於分配記憶體空間)           Person *p = [Person alloc];           《2》對象初始化(init方法:用於初始化對象),將記憶體空間數據清零           p = [p init];             《3》將創建對象的《1》和《2》合成一步           Person *p1 = [[Person alloc] init];             ②使用成員變數           p1->_age = 10;           p1->_name = @“貝爺”;             ③使用方法           [p1 sayHi];
     }      return 0;
} 4.類是對一類具有相同事物行為和特征事物的抽象 5.封裝、繼承、多態 ①封裝:將現實世界中存在的某個客體的屬性與行為綁定在一起,並放置在一個邏輯單元內 ②繼承:子類自動共用父類數據結構和方法的機制,這是類之間的一種關係 ③多態:指相同的操作或函數、過程可作用於多種類型的對象上並獲得不同的結果 6.@class的作用:只是表示有Girl這麼一個類型,其他的什麼都沒做。在什麼地方使用Girl這個類時,再導入Girl.h 註意:我們一般選擇在.h中使用@class,在.m中引入頭文件 7.組合類的使用:(指針存儲對象的首地址,代指對象。OC中使用指針代指對象,進行操作) ①Mother.h #import <Foundation/Foundation.h>

@interface Mother : NSObject
{
    @public
    NSString *_name;
}
@end ②Father.h #import <Foundation/Foundation.h>

@interface Father : NSObject
{
    @public
    NSString *_name;
}

@end ③Child.h #import <Foundation/Foundation.h>

@interface Child : NSObject
{
    @public
    NSString *_name;
}
@end ④Family.h #import <Foundation/Foundation.h> #class Father; #class Mother; #class Child;
@interface Family : NSObject
{
@public
    Father *_f;
    Mother *_m;
    Child  *_c;
}

@end ⑤main.m         Father *father = [[Father alloc]init];
        father->_name = @"父親";
        Mother *mother = [[Mother alloc] init];
        mother->_name = @"母親";
        Child *child = [[Child alloc] init];
        child->_name = @"孩子";
        Family *family = [[Family alloc] init];
        family->_f = father;
        family->_m = mother;
        family->_c = child;
        NSLog(@"%@ %@ %@ ",family->_f->_name,family->_m->_name,family->_c->_name); 8.列印字元串用“%@”做占位符。用”[]”調用方法 有列印,沒有控制台輸入 9. ①面向過程:編程以事件(任務)為中心,程式圍繞事件,列出了事件的每個步驟,一步一步完成(側重點:實現功能 C) ②面向對象:編程以事物為中心,程式圍繞事物展開,完成事件只是一個小任務(側重點:對象的特征 OC,C++,java) 10.Objective-C中的幾種方法 ①“-”實例方法:由類的實例來執行。換言之,在調用實例方法之前,必須先創建該類的實例。實例方法是最常見的方法類型(方法只能對象使用) 示例:- (instancetype)init; // 有參(1個參)無返回值
// 冒號屬於方法名的一部分
// 方法名:printNum:
- (void)printNum:(NSInteger)num;
// 有兩個參數
// 方法名:printName:age:
- (void)printName:(NSString *)name age:(NSInteger)age;

//有三個參數
//方法名:printName:age:score:
- (void)printName:(NSString *)name age:(NSInteger)age score:(CGFloat)score; ②“+”類方法:可由它所在的類直接執行。它不需要對象的實例作為消息的接收者(方法只能被類使用) 示例:+ (instancetype)alloc; 註:類方法中不能使用實例變數 11.instancetype和id區別 ①instancetype可以返回和方法所在類相同類型的對象,id只能返回未知類型對象。 ②instancetype只能作為返回值和參數,id還可以用來定義變數 ③instancetype會告訴編譯器當前的類型,但id對編譯器卻是無類型的,調用任何方法不會給出錯誤提示 ④對於init方法,id和instancetype是沒有區別的。因為編譯器會把id優化成instancetype。當明確返回的類型就是當前class時,使用instancetype能避免id帶來的編譯不出錯誤的情況。 12.如何獲取方法名 ①刪除:類型標識,返回類型,參數類型,參數名,空格。 示例:replaceObjectAtIndex:withObject 註意:類中不能出現同名方法;“:”標識參數,不能省略。有冒號必須有參數;冒號屬於方法名的一部分。 13.在OC中使用消息發送機制:[receiver message] 表述:①給receiver對象發送message消息②receiver接收到消息,即方法getSalary③receiver找到message方法,並執行 14.setter和getter方法 ①在OC中,為單一實例變數賦值的方法稱作setter(設置器) ②獲取單一實例變數值得方法稱作getter(訪問器) 15.setter和getter方法的書寫格式 給實例變數:NSInteger _age; ①setter的書寫格式:- (void)setAge:(NSInteger)age; 即set+首字母大寫的實例變數名(忽略下劃線) ②getter的書寫格式:- (NSInteger)age; j即返回值類型與變數類型一致,方法名與實例變數名相同(忽略下劃線) 16.setter和getter與實例變數的關係 ①無論setter還是getter內部操作的是實例變數 ②每一個實例變數都需要一對setter和getter方法 17.setter和getter的實際操作 ①Person.h #import <Foundation/Foundation.h>

//類的介面部分
/*
 1.定義一個類
 2.添加當前類屬性(特征)
 3.添加當前類行為(方法)
 */
@interface Person : NSObject
{
    //大括弧內部,添加當前類屬性
    //字元串類型
    NSString *name;//姓名,NSString同樣是一個類
    //整型
    NSInteger age;//年齡,NSInteger是數值類型,不是一種類
    //字元串類型
    NSString *gender;//性別
}
//初始化方法
//希望通過初始化方法,能夠獲得一個Person類的實例對象,並且希望該對象具有自己的姓名屬性
- (id)initWithName:(NSString *)_name;

//大括弧外部,添加當前類行為
- (void)sayHi;

//設置器 setter
- (void)setName:(NSString *)_name;
- (void)setAge:(NSInteger)_age;
- (void)setGender:(NSString *)_gender;

//訪問器 getter
- (NSString *)getName;
- (NSInteger)getAge;
- (NSString *)getGender;

@end ②Person.m #import "Person.h"

@implementation Person

- (id)initWithName:(NSString *)_name{

    //1.原始初始化,也就是將記憶體內的變數置零
    self = [super init];//init方法發送給super對象
    //2.原始初始化成功之後,需要設置當前對象的姓名為形參
    if (self != nil) {
        name = _name;
    }
    //3.返回當前對象
    return self;
}

//大括弧外部,添加當前類行為
- (void)sayHi{
   
    //NSLog將字元串列印在控制台進行輸出,類似於printf();
    NSLog(@"hello world");
}

//設置器 setter
- (void)setName:(NSString *)_name{
    //設置給當前對象的屬性
    name = _name;
}
- (void)setAge:(NSInteger)_age{
    age = _age;
}
- (void)setGender:(NSString *)_gender{
    gender = _gender;
}

//訪問器 getter
- (NSString *)getName{
    //訪問當前對象的屬性
    return name;
}
- (NSInteger)getAge{
    return age;
}
- (NSString *)getGender{
    return gender;
}
@end ③main.m #import <Foundation/Foundation.h>
#import "Person.h"//引入類名字
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 對CSS盒子模型的理解,以及闡述了margin、border、padding、content的作用和在標準模式與怪異模式的區別。
  • 1、AJAX 簡介 AJAX(音譯為:阿賈克斯) = Asynchronous JavaScript and XML(非同步的 JavaScript 和 XML),是指一種創建互動式網頁應用的網頁開發技術,也就是在無需重新載入整個網頁的情況下,能夠更新部分網頁的技術。AJAX 不是新的編程語言,而是一
  • 1 <!DOCTYPE html> 2 <html xmlns="http://www.w3.org/1999/xhtml"> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 5 <ti
  • 前言 昨天博客接入了評論系統,使用的是國內的多說。 之前看到過有些利用該評論系統的有瀏覽器和系統信息的顯示,感覺很不錯。 所以,也想有這樣的效果。 問題 多說如何顯示瀏覽器和系統的信息? 解決方法 經過查找,利用UAParser.js可以實現。 步驟 1. 添加樣式 1 span.this_ua {
  • 對HTML5以下描述中錯誤的是() 以下關於video元素描述錯誤的是() 若要在網頁中插入樣式表style.css,以下用法中,正確的是( )。 以下可以在html頁面中顯示“<”的是( )。 A. It;B. &Lt;C. &ItD. < 請使用HTML解碼工具:http://tool.hove
  • 點擊enter回車鍵實現表單元素切換焦點效果:現在網站都比較追求人性化,比如填寫表單的時候,能夠實現點擊回車就可以切換表單元素的焦點,這樣比使用滑鼠進行切換更能讓人接受,下麵就通過代碼實例介紹一下如何實現此功能。代碼如下: <!DOCTYPE html> <html> <head> <meta ch
  • javascript截取字元串代碼實例:截取字元串是常見的操作,例如新聞列表對新聞標題長度的控制就是如此,下麵分享一段這樣的代碼實例,也不多做介紹了,因為代碼很簡單,很多朋友需要的僅僅是一個例子而已,因為只要看到例子就知道該怎麼用了。代碼如下: var str="螞蟻部落歡迎您,只有努力才會有美好的
  • css如何實現讓文字沉到元素的底部:在實際應用中可能有這樣的需求,那就是將指定的文本沉降到元素的底部。下麵就通過代碼實例介紹以下如何實現此效果。代碼如下: <!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name="author
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...