OC中的類

OC中類

OC中類的定義

在Xcode中創建一個新的類,會自動給你生成兩個文件一個是.h另外一個是.m文件,你新創建的類默認繼承了NSObject類,因為有一些方法都需要基類中的方法。比如alloc分配內存
OC中用來描述類的使用@interface 類名:父類來進行定義然后用@end來定義類的結束

@interface NsFirst : NSObject{int _age;int _no;
}
- (void )setAge:(int)age;
-(int)getAge;
-(void) setNo:(int) no;
-(int) getNo;
@end

OC中類的實現

跟C++不同的一點,OC中的類的實現并不能和聲明放在一起,否則編譯會報錯。而在C++中雖然強調要分開寫,但寫到同一個文件中也并不會出錯,而在OC中就不是這樣
OC中新開一個文件用來進行類的實現,用@implementation 類名開始進行實現,用@end對實現進行結束標記

@implementation NsFirst
-(void )setAge:(int)age{_age = age;
}
-(int)getAge{return _age;
}
-(void)setNo:(int)no{_no = no;
}
-(int)getNo{return _no;
}
@end

類的方法

對于每一個類都有靜態方法(對于類的方法)和動態方法(對于對象的方法),C++中調用靜態方法用的是類作用域運算符::去進行調用,對于動態方法通過->或者.兩個運算法來進行調用
而在OC中調用相應的方法都是通過消息發送,也就是[]這個運算符

//對于上面的類進行相應方法調用
id ns = [[NsFirst alloc] init];
[ns setAge:100];
NSLog(@"age is %i",[ns getAge]);

自定義構造方法

一般我們使用的init方法是編譯器默認的一種動態方法,會給對象初始化為0,而有些時候我們需要初始化后進行賦值,所以此時就需要重寫init方法
重寫init方法

  1. 自己寫的init方法名稱不能與系統一樣
  2. init方法的步驟
    1. 先調用基類構造
    2. 判斷是否對象是否創建成功,成功后進行賦值操作
    3. 返回當前對象self
@interface Student : NSObject
@property int age;
@property int no;
//自己寫一個構造方法
-(id)initWithAge:(int)age :(int)no;
@end@implementation Student
-(id)initWithAge:(int)age :(int)no{//首先調用super的init的方法 //判斷是否初始化成功if(self = [super init]){//賦值self.age = age;self.no = no;}   //返回return self;
}
@end

打印對象信息時的description方法

關于多文件編譯

OC中可以有多個.h和.m文件,但入口函數都是main函數,而且OC中沒有命名空間,所以兩個文件中的類名是可能重名的,所以我們盡可能命名使類名不能出現重名的情況。

點語法

C++中如果定義了對象,可以通過對象名.的方式對對象中屬性進行操作,在OC中也提供了這種類似的方式
OC中的點語法要去使用的話,必須要有相應的set方法且set方法設置的屬性必須與點語法后的屬性名匹配

@interface Person : NSObject{int _age;int _no;
}
//-(void)setAge:(int)age:(int)no;
-(void )setAge:(int)age;
-(void )setNo:(int)No;
-(int)getAge;
-(int)getNo;
@end#import "Person.h"
int main(int argc, const char * argv[]) {@autoreleasepool {// insert code here...Person* p = [[Person alloc] init];p.age = 10;  //這里就相當于調用setAge方法,但注意setAge方法只能對age這一個屬性進行操作p.no = 20;
//        [p setAge:10 :20];int age = [p getAge];int no = [p getNo];NSLog(@"age is %i and no is %i",age,no);}return 0;
}

@propety

在寫OC中如果給每個屬性都寫上get和set方法,顯得代碼太過于冗余,可以使用@propety來定義成員變量,這樣編譯器就可以自動為我們進行set方法和get方法的聲明

  1. @propety = 聲明set和get方法
  2. @synthesize = 實現set和get方法
@interface Property : NSObject{int age;int no;float height;
}
@property int age;
//-(void) setage:(int)newAge;
//-(int)age;
@property int  no;
@property float height;
@end@implementation Property@synthesize age;
@synthesize height;
@synthesize no;
@end

如果在有很多的成員變量例如如下情況

@interface Property : NSObject{int age;int age1;int age2;
}

那么使用@propety默認聲明與其同名的成員變量的set和get方法
使用@propety聲明變量后編譯器自動幫助我們聲明成員變量,我們就不用再手動聲明變量。自動生成的變量為私有的.
@synthesize 實現的成員變量如果沒有顯示定義,則會隱式創建一個與其名稱相同的變量,若是想要其生成的方法是我顯示定義的方法,則需指定實現具體的哪個變量

@synthesize age = _age

目前版本中,一但使用@propety聲明了變量,編譯器會自動幫助我們生成@synthesize,自動幫我們實現
如果我們覺的編譯器幫助我們生成的方法并不符合我們的預期,那么我們可以自己實現相應的get方法和set方法,編譯器就不會再幫我們實現了,如果我們只想要get或者set兩者中的任意一個的話,我們只需要實現其中的任意一個就行,另外一個編譯器依舊會幫助我們實現

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/383042.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/383042.shtml
英文地址,請注明出處:http://en.pswp.cn/news/383042.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

裝配組件_基于Haption力反饋系統的交互式裝配仿真

在一個新工業產品的設計過程中,裝配規劃是非常重要的任務。如果規劃不好將造成很大的資金浪費,致使組件不能正確地集成。例如典型問題:移動一個組件到指定位置但空間不足;使用工具夠不到螺絲;操作者沒有足夠的視域以保…

OC中的基本容器和基本數據類型

基本數據類型 NSRange 是一個結構體,里面有兩個數據成員數據類型都為NSUInteger 就是c語言中的無符號整形,一個是location表示集合的起始地址,另外一個變量是length表示從起始地址開始算多少個元素。 NSRange的三種創建方式 //1.NSRange r…

python程序開發總結_python開發總結

兩本不錯的書:《Python參考手冊》:對Python各個標準模塊,特性介紹的比較詳細。《Python核心編程》:介紹的比較深入,關鍵是,對Python很多高級特性都有介紹。一個開源代碼:openstack,關…

Centos7通過yum安裝jsoncpp庫

拒絕下載軟件包 一堆網上下載安裝包,為了編譯暗轉包又下載插件,是真麻煩 看看有沒有jsoncpp的相關庫 $ yum list | grep jsoncpp-devel然后執行這兩句,就完了 yum install jsoncpp.x86_64 yum install jsoncpp.devel.x86-64多簡單

作為唯一索引_Mysql什么情況下不走索引?

本文基于Mysql5.7版本和InnoDB存儲引擎。1、InnoDB索引組織表在InnoDB引擎中,表都是按照主鍵順序組織存放的,這種存放方式的表稱為索引組織表。InnoDB存儲引擎中的表,都有主鍵,如果沒有顯式聲明主鍵,則采取以下措施&am…

python捕獲全局異常統一管理_python中如何用sys.excepthook來對全局異常進行捕獲、顯示及輸出到error日志中...

使用sys.excepthook函數進行全局異常的獲取。1. 使用MessageDialog實現異常顯示;2. 使用logger把捕獲的異常信息輸出到日志中;步驟:定義異常處理函數, 并使用該函來替換掉系統的內置處理函數;對于threading.py的異常捕…

r語言系統計算上是奇異的_R語言實現并行計算

Python作為多線程的編程語言在并行方面相對于R語言有很大的優勢,然而作為占據統計分析一席之地的R語言自然不能沒有并行計算的助力。那么我們來看下在R語言中有哪些并行的包:隱式并行:OpenBLAS,Intel MKL,NVIDIA cuBLA…

cansina 目錄_dirmap - 一個高級web目錄、文件掃描工具-華盟網

Dirmap一個高級web目錄掃描工具,功能將會強于DirBuster、Dirsearch、cansina、御劍需求分析經過大量調研,總結一個優秀的web目錄掃描工具至少具備以下功能:并發引擎能使用字典能純爆破能爬取頁面動態生成字典能fuzz掃描自定義請求自定義響應結…

唯有自己變得強大_物競天擇,適者生存,唯有強大自己,方能百毒不侵

物競天擇,適者生存,這是亙古不變的道理。面對生活中的困難,人生路上的挫折,我們只有足夠堅強,足夠勇敢,足夠強大,才能戰勝這一切。人活著要明白,你所有的負面,都源于你的…

樹莓派c語言運行_樹莓派完成簡單的編程(四)

在上一篇文章中,我們學習了Vi文本編輯器,那么用它可以實現什么功能呢?樹莓派python以及c語言編程這里我選擇了最簡單和很流行的兩種編程語言:C語言和Python。實現最簡單的功能,輸出hello world。Python編程簡介Python是…

mysql 讀寫引擎_揭秘MySQL存儲引擎spider

轉自:興趣部落?buluo.qq.com導讀: Spider是為MySQL/MariaDB開發的一個特殊引擎,具有內嵌分片功能。現在它已經被集成到MariaDB10.0及以上版本中,作為MariaDB的一個新的主要性。Spider的主要功能是將數據分散到多個后端節點&#…

python中的與或非_「Python基礎」 While 循環語句

Python 編程中 while 語句用于循環執行程序,即在某條件下,循環執行某段程序,以處理需要重復處理的相同任務。其基本形式為:while 判斷條件:執行語句……執行語句可以是單個語句或語句塊。判斷條件可以是任何表達式&…

lamp mysql大小限制_LAMP 調優之:MySQL 服務器調優

關于 MySQL 調優有 3 種方法可以加快 MySQL 服務器的運行速度,效率從低到高依次為:替換有問題的硬件。對 MySQL 進程的設置進行調優。對查詢進行優化。替換有問題的硬件通常是我們的第一考慮,主要原因是數據庫會占用大量資源。不過這種解決方…

go定時器 每天重復_Go語言學習基礎-定時器、計時器

Timer計時器如果希望在將來的某個時間點執行Go代碼,或者在某個時間間隔重復執行Go代碼,使用Go內置的timer和ticker功能。先看定時器timer,然后再看計時器ticker。定時器代表未來的單個事件。告訴定時器需要等待多長時間,它返回一個…

html類名定義規則_HTML入門筆記1

HTML 是誰發明的?Tim Berners-LeeHTML起手式&#xff1a;HTML起手式 <!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0&q…

mysql主從虛擬機_虛擬機centos7Mysql實現主從配置

環境搭建在虛擬機上和創建兩個一模一樣的centos7系統&#xff0c;并安裝相同版本的mysql(可以先創建一個再克隆)在master上操作登錄mysqlmysql -u root -p使用mysqluse mysql;創建用戶CREATE USER lystbc1% IDENTIFIED BY Lys135426tbc;給用戶授權GRANT REPLICATION SLAVE ON *…

怎樣檢測mysql5.5安裝成功_64位wiN7系統中裝配MySQL5.5.17(測試安裝成功哦!)

64位wiN7系統中安裝mysql5.5.17(測試安裝成功哦&#xff01;&#xff01;~~)下載地址&#xff1a;[url] http://www.mysql.com/downloads/mysql/[/url]下載的話需要登錄,你只需按照要求注冊一個賬號,然后下載即可.我下載的是mysql-5.5.17-winx64.msi版本.安裝步驟:Step 1. Mysq…

xcode 創建模擬器_Xcode編譯WebKit

下載WebKit源碼1)進入https://webkit.org/2)點擊頁面的 Get Started 進入新頁面&#xff0c;如下圖所示3)點擊 Getting the code 進入新頁面&#xff0c;如下圖所示4)在源碼下載頁面&#xff0c;有多種下載方式&#xff0c;包括直接下載代碼zip包&#xff0c;通過SVN下載&#…

mysql iscsi_iscsi共享存儲的簡單配置和應用

1、環境介紹SCSI(Small Computer System Interface)是塊數據傳輸協議&#xff0c;在存儲行業廣泛應用&#xff0c;是存儲設備最基本的標準協議。從根本上說&#xff0c;iSCSI協議是一種利用IP網絡來傳輸潛伏時間短的SCSI數據塊的方法&#xff0c;ISCSI使用以太網協議傳送SCSI命…

request mysql 接口_TP5接口開發

開啟debug調試模式(正式上線建議關閉)config.php// 應用調試模式app_debug > true,設置輸出類型index.phpnamespace app\index\controller;class Index{public function index(){$data [name > steven, age > 24];return json([code > 0, msg > 操作成功, data…