日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【IOS 开发】Object - C 面向对象 - 类 , 对象 , 成员变量 , 成员方法

發布時間:2025/6/17 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【IOS 开发】Object - C 面向对象 - 类 , 对象 , 成员变量 , 成员方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

.





一. 類定義


類定義需要實現兩部分 :?

-- 接口部分 : 定義類的成員變量和方法, 方法是抽象的, 在頭文件中定義;

-- 實現部分 : 引入接口部分的頭文件, 實現抽象方法;



1. 接口部分定義?



(1) 接口部分定義格式


接口部分定義格式 :?

@interface className : superClassName

{

type _variableName;

... ...

}

- (type) methodName : type parameterName;

@end

-- 接口定義開始標識 : @interface 表示接口開始定義;

-- 接口定義結束標識 : @end 表示接口定義結束;

-- 接口名稱定義 : 緊跟在 @interface 后 是類名稱;

-- 父類接口 : 如果有父類, 在接口名稱后面的 : 后寫出;

-- 成員變量定義 : 在 @interface 后的 {} 中定義 成員變量;

-- 成員方法 : 在 {} 中定義完成員變量后定義成員方法;



(2) 成員變量定義

.

注意 : 成員方法中的 返回值類型 和 參數類型必須使用 () 括起來, 以便與 C 語言方法區分;

.

成員變量簡介 :?

-- 定義格式 : 類型 成員變量名, 如 int _age;

-- 定義位置 : 在 @interface 的下一行的 大括號中定義, 至右成員變量是定義在大括號中的;

-- 可用類型 : 基本類型, 構造類型, 各種指針型類型;

-- 命名規范 : 成員變量一般建議 使用 "_" 開頭, 駝峰式命名;



(3) 成員方法


成員方法簡介 :?

-- 成員方法格式 : 方法類型標識 (返回值類型) 方法名稱 : (參數類型) 參數名稱 方法簽名關鍵字 : (參數類型) 參數名稱;

-- 方法標識符 : "+" 表示類方法, "-" 表示實例方法;

-- 方法簽名關鍵字 : 由 方法名, 形參標簽, 冒號組成;

-- 形參標簽 : Object-C 慣例, 除了第一個形參之外, 為每個形參都制定一個形參標簽;


方法簽名意義 :?

-- "method" : 表示方法沒有參數;

-- "method : " : 表示方法有一個形參;

-- "method : param : " : 表示方法有兩個形參;



(4) 接口部分代碼示例


示例 :?

/*************************************************************************> File Name: Student.h> Author: octopus> Mail: octopus_truth.163.com > Created Time: 日 12/14 19:51:16 2014類接口部分示例************************************************************************/ #import <Foundation/Foundation.h>@interface Student : NSObject {/** 成員變量定義在 接口聲明的花括號中* 注意成員變量之前以 "_" 開頭*/NSString * _name;int _age; }/** 定義 setData : setAge : 方法* - 表示該方法需要通過對象調用* setAge 是形參標簽*/ - (void) setData : (NSString*)name setAge:(int)age;// 定義 speak : 方法 - (void) speak : (NSString*) content;// 定義一個不帶參數的方法 - (NSString*) toString;+ (void) fuck;


2. 實現部分定義



(1) 實現部分定義格式


實現部分格式 :?

@implementation className

{

type _variable;

}

- (type) methodName : (type)param

{

//方法體

}

@end



(2) 類名 與 父類


實現部分類名要求 : 類名 與 類 接口部分類名相同;


父類繼承 : 如果有父類, 可以使用 "@implementation 類名 : 父類名" 表示;



(3) 實現部分的成員變量 和 成員方法


聲明成員變量 : 如果在實現部分聲明成員變量, 那么該成員變量在外部不可訪問, 只能在實現部分訪問;


成員方法簡介 :?

-- 實現抽象成員方法 : 實現接口部分定義的抽象方法, 即為接口部分方法寫方法體;

-- 聲明成員方法 : 在實現部分聲明成員方法, 外部不可訪問, 只能在實現部分進行訪問;



(4) 抽象方法示例


代碼示例 :?

/*************************************************************************> File Name: Student.m> Author: octopus> Mail: octopus_truth.163.com > Created Time: 日 12/14 20:04:28 2014************************************************************************/ /** 這里導入 Student.h 包即可, 因為 在 Student.h 包已經導入了 Foundation.h 頭文件了*/#import <Student.h>@implementation Student{//定義的該成員變量 只能在實現部分使用, 是隱藏的成員變量;int _class;}//定義了 setData : setAge : 方法- (void) setData : (NSString*)name setAge:(int)age{_name = name;_age = age;}- (void) speak : (NSString)content{NSLog(@"%@", content);}//定義了一個帶返回值的方法- (NSString*) toString{return [NSString stringWithFormat : @"name = %@, age = %d", _name, _age];}+ (void) fuck{NSLog(@"fuck");} @end



二. 對象詳解



1. 對象 定義, 創建 和 方法調用



(1) 對象定義


變量定義語法 : 類型* 對象名;

-- 示例 : 如上面定義的 Student 類型的對象, Student* student;



(2) 創建對象


創建對象語法 : [[類名 alloc] 初始化方法] , 示例 [[Student alloc] init];

-- alloc : alloc 是一個關鍵字, 表示這是創建對象的語句, 相當于 Java 中得 new, 負責分配內存空間 和 創建對象;

-- 初始化方法 : 所有的對象都從 NSObject 繼承了一個默認的初始化方法 init;


另一種創建對象方法 : [類名 new], 示例 [Student new] ;

-- 解析 : 這是為了照顧 Java 程序員習慣, 一般不常用;



(3) 方法調用


方法調用語法 : [調用者 方法名:參數1 形參標簽:參數2 ...], 示例 [stident fuck];

-- 調用者 : 可以是對象 也可以是 類, 對象調用實例方法, 類 調用類方法;



(4) 示例?


代碼示例 :?

-- 代碼 :?

/*************************************************************************> File Name: StudentTest.m> Author: octopus> Mail: octopus_truth.163.com > Created Time: 日 12/28 21:58:41 2014************************************************************************/#import <Foundation/Foundation.h> #import "Student.h"int main(int argc, char * argv[]) {@autoreleasepool {//定義變量Student* student;//創建變量student = [[Student alloc] init];//方法調用, 調用類方法, 注意 類方法只能由類調用, 不能由對象調用[Student fuck];//調用帶參數的方法[student speak : @"fuck you!"];//為成員變量賦值[student setData : @"悟空" setAge : 25];//打印成員變量NSString* stuStr = [student toString];NSLog(@"Student is : %@", stuStr);} }

-- 執行結果 :?

octopus-2:oc_object octopus$ clang -fobjc-arc -framework Foundation Student.m StudentTest.m octopus-2:oc_object octopus$ ./a.out 2014-12-28 23:22:37.702 a.out[415:507] fuck 2014-12-28 23:22:37.704 a.out[415:507] fuck you! 2014-12-28 23:22:37.705 a.out[415:507] Student is : name = 悟空, age = 25



2. 對象 和 變量?



(1) 對象 和 指針變量概念


概念引入 : Student* student = [[Student alloc] init], 產生了 Student 對象 和 student 變量;

-- 對象 : 創建了一個 Student 類型的對象;

-- 指針變量 : person 就是指向對象的指針變量;



(2) 對象 和 指針變量存儲內容


對象 和 變量的存儲內容 :?

-- 對象 : 存儲了創建的 Student 對象的 成員變量;

-- 指針變量 : 存儲了該對象在堆內存中得首地址, 即第一個成員變量的首地址;



(3) 對象 和 指針變量 的位置


對象 和 變量的保存地址 :?

-- 對象 : 對象保存在 堆(heap)內存中;

-- 指針變量 : 保存在main()方法的動態存儲區中;



(4) 對象 與 指針變量對應關系


對應關系 : 一個指針只能指向一個對象, 一個對象可以有多個指針指向她;



(5) 對象釋放


內存泄露 : 如果沒有指針指向某個對象, 那么這個對象需要被釋放掉, 否則會造成內存泄露;

-- 解決方案 : 使用自動引用計數, 即將程序放在 @autoreleasepool{}中;




3. self 關鍵字



(1) 調用對象本身的方法 或 變量


調用本身方法 : 在對象中, 調用對象本身的方法 或 變量;

-- 調用本身方法 : [self 方法名 : 參數1 形參標簽:參數2 ...] ;

-- 調用本身成員變量 : self->成員變量名 ;


注意 : self 不能調用 類方法 和 在類方法中調用, self 使用方法與 對象相同;



(2) 作用?


區分成員變量 和 局部變量 : 如果局部變量與成員變量重名, 使用 self->成員變量名 可以表示成員變量, 默認的名稱就是局部變量;



(3) 代碼示例?


代碼示例 : 修改上面的 Student.m 代碼, 編譯后執行, 注意有警告, 方法中得成員變量 與 形參名稱 重復;

-- 代碼 :?

/*************************************************************************> File Name: Student.m> Author: octopus> Mail: octopus_truth.163.com > Created Time: 日 12/14 20:04:28 2014************************************************************************/ /** 這里導入 Student.h 包即可, 因為 在 Student.h 包已經導入了 Foundation.h 頭文件了*/#import "Student.h"@implementation Student{//定義的該成員變量 只能在實現部分使用, 是隱藏的成員變量;int _class;}//定義了 setData : setAge : 方法- (void) setData : (NSString*)_name setAge:(int)_age{//self 關鍵字用于 區分 成員變量 和 方法的形參 self->_name = _name;self->_age = _age;}- (void) speak : (NSString*)content{NSLog(@"%@", content);}//定義了一個帶返回值的方法- (NSString*) toString{//self 關鍵字用于調用本對象的方法[self speak : @"正在調用 toString 方法 : "];return [NSString stringWithFormat : @"name = %@, age = %d", _name, _age];}+ (void) fuck{NSLog(@"fuck");} @end

-- 執行結果 :?

octopus-2:oc_object octopus$ clang -fobjc-arc -framework Foundation Student.m StudentTest.m Student.m:21:16: warning: local declaration of '_name' hides instance variable [-Wshadow-ivar]self->_name = _name;^ Student.m:22:15: warning: local declaration of '_age' hides instance variable [-Wshadow-ivar]self->_age = _age;^ 2 warnings generated. octopus-2:oc_object octopus$ ./a.out 2014-12-29 00:49:46.728 a.out[558:507] fuck 2014-12-29 00:49:46.730 a.out[558:507] fuck you! 2014-12-29 00:49:46.731 a.out[558:507] 正在調用 toString 方法 : 2014-12-29 00:49:46.731 a.out[558:507] Student is : name = 悟空, age = 25



4. id類型



(1) id 類型


id類型 : 代表所有的對象類型;

-- 示例 : id student = [[Student alloc] init];



(2) 動態綁定


動態綁定 : 跟蹤對象所屬類, 在運行時判定對象所屬類, 并在運行時確定調用方法, 不是在編譯時;

-- 使用情況 : id 類型的變量調用方法時會執行動態綁定;



(3) 代碼示例


代碼示例 :?

-- 代碼 :?

/*************************************************************************> File Name: StudentTest.m> Author: octopus> Mail: octopus_truth.163.com > Created Time: 日 12/28 21:58:41 2014************************************************************************/#import <Foundation/Foundation.h> #import "Student.h"int main(int argc, char * argv[]) {@autoreleasepool {//定義變量Student* student;//創建變量student = [[Student alloc] init];//方法調用, 調用類方法, 注意 類方法只能由類調用, 不能由對象調用[Student fuck];//調用帶參數的方法[student speak : @"fuck you!"];//為成員變量賦值[student setData : @"悟空" setAge : 25];//打印成員變量NSString* stuStr = [student toString];NSLog(@"Student is : %@", stuStr);} }

--執行結果 :?

octopus-2:oc_object octopus$ clang -fobjc-arc -framework Foundation Student.m StudentTest.m Student.m:22:16: warning: local declaration of '_name' hides instance variable [-Wshadow-ivar]self->_name = _name;^ Student.m:23:15: warning: local declaration of '_age' hides instance variable [-Wshadow-ivar]self->_age = _age;^ 2 warnings generated. octopus-2:oc_object octopus$ ./a.out 2014-12-29 01:09:23.548 a.out[605:507] fuck 2014-12-29 01:09:23.550 a.out[605:507] fuck you! 2014-12-29 01:09:23.550 a.out[605:507] 正在調用 toString 方法 : 2014-12-29 01:09:23.550 a.out[605:507] Student is : name = 悟空, age = 25 2014-12-29 01:09:23.551 a.out[605:507] 正在調用 toString 方法 : 2014-12-29 01:09:23.551 a.out[605:507] id is : name = 八戒, age = 23



總結

以上是生活随笔為你收集整理的【IOS 开发】Object - C 面向对象 - 类 , 对象 , 成员变量 , 成员方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲综合在线观看视频 | 国产av成人一区二区三区高清 | 婷久久 | 一级片视频免费看 | 免费的一级黄色片 | 99热超碰在线| 亚洲精品免费在线 | 特黄一区二区 | 91国产一区| 免费国偷自产拍精品视频 | 91成年版| 精品久久久无码中文字幕边打电话 | 18禁免费无码无遮挡不卡网站 | www.欧美一区二区三区 | 国产老女人乱淫免费可以 | 国产精品无码专区 | 亚洲国产一二三 | 奶妈的诱惑 | 在线亚洲+欧美+日本专区 | 久久久久久久亚洲 | 99er在线 | 色婷婷综合视频 | 87福利视频 | 婷婷四房综合激情五月 | 黑人一区二区三区 | 国产视频二| 亚洲国内在线 | 国产污片在线观看 | 久操这里只有精品 | 99re在线观看视频 | 国内自拍第三页 | 午夜福利电影一区二区 | www.色午夜.com| 婷婷五月情 | 视频二区在线 | 日本性欧美 | 99看片| 最新免费黄色网址 | 色播五月激情 | 激情五月五月婷婷 | 777色| 黄色免费视屏 | 国产在线视频99 | 青娱乐在线免费观看 | 综合久久伊人 | 免费天堂av | 91传媒理伦片在线观看 | 国产又粗又深又猛又爽又在线观看 | 亚洲大片在线观看 | 成人欧美视频 | 制中文字幕音影 | 亚洲视频精选 | 国产成人精品免费在线观看 | 久久久久久久极品 | 91精品国产一区二区三区 | 伊人久久狼人 | 女人喷潮完整视频 | 一区二区三区久久精品 | 亚洲自拍第三页 | 豆花视频在线 | 91一二区 | 青青草色视频 | 欧美深性狂猛ⅹxxx深喉 | 外国毛片 | 日本黄色录像片 | 狠狠干影院 | 久草视频在线观 | 骚虎av在线 | 国内久久久久 | 成年网站在线播放 | 国模无码视频一区二区三区 | 丰满岳乱妇国产精品一区 | 国产区视频 | 1000部av| 亚洲精品推荐 | 毛片基地在线播放 | 天天插天天爱 | 欧美理伦少妇2做爰 | 亚洲尤物视频 | 韩国毛片网站 | jizz日本在线| 在线免费观看日韩av | 亚洲少妇30p | 在线一区二区观看 | 国产精品美女久久久久av爽 | 亚洲影院一区二区三区 | 国产视频久久久久久久 | 久久久老熟女一区二区三区91 | 自拍视频在线 | 久在线观看 | 国产3p露脸普通话对白 | 成人毛片在线观看 | 日日鲁鲁鲁夜夜爽爽狠狠视频97 | 黄色片免费播放 | 女人扒开腿让男人桶爽 | 在线观看福利视频 | 福利视频91 | jizz另类| 日韩欧美在线精品 |