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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Objective-C学习笔记(一)–类

發布時間:2025/3/8 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Objective-C学习笔记(一)–类 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、類的定義與實現

1.1說明

所有的類都是繼承NSObject。類的接口與實現是分開的,一般類的定義是放在.h文件【包含類的名稱、成員變量、方法、屬性、繼承關系 、遵從的協議】;實現部分是放在.m文件中【包含每個屬性和方法的具體實現以及協議的方法實現】

語法:【類的定義以@interface開頭以@end結束;類的實現以@implementation關鍵字開頭以@end結束】

Person.h

@interface Person:NSObject{

//類的成員變量區【類的成員變量聲明】


}


//類的方法與屬性區【類的方法與屬性的定義】

@end


Person.m


#import “Person.h”

@implementation Person{



}

@end



1.2實例化alloc

實例一個新的對象需要調用類的alloc靜態方法。alloc方法一旦調用就表明了向內存申請了一個空間用來保存該類的信息。

具體流程是:alloc會查看所有該類及所有基類,統計出這些類一共定義了哪些成員變量,總共需要多大的內存空間用來保存這些信息,然后向操作系統發出請求申請這些空間,如果成功,alloc方法會將所有的成員亦是置為0,除了一個特殊的指向其類元對象的成員之外,然后返回這塊申請下來的空間的首地址


流程圖:






2、成員變量與方法


2.1變量

變量分為成員變量和類的靜態變量。

成員變量

可訪問性:@protected、@private、@public

關鍵字可見性描述

@protected當前類及子類的實例方法可見默認值,類里聲明的成員變量的可訪問級別默認為@protected。


@private只對當前類的實例方法可見私有訪問級別

@publice成員變量對外可見


變量的聲明

@interface Person:NSObject{


@private

NSString *_name;

int _age;


}


靜態變量

使用static關鍵字表示,定義在類的實例部分中所有實例方法之外。類的靜態變量對于實例方法和類方法都是可見的。

@implementation Person


static int NumberPerson=0;


@end




2.2方法

方法的聲明語法

+|-(返回值類型)方法名;

+|-(返回值類型)參數1說明:(參數1類型)參數1名稱 參數2說明: (參數2類型)參數2名稱;

+:加號表示該方法是一個類的方法,類的靜態方法,它不屬于類的任何實例只屬于該類。【類似于Java中的static方法】 調用格式為 [類 方法名] 例: [Person setMaxAge:20];

-:減號表示該方法的實例方法,屬于實例。調用時必須先將實例化,然后再調用。調用格式為[類的實例 方法名]

例:Person *xiaoMing=[[Person alloc] init];//實例化

[xiaoMing setName:@”90worker”];


注意:

-(BOOL)likeFood:(NSString *)food;

方法名為likeFood: 【注意有個冒號】

-(id) initWithcName:(NSString *)name andAge:(int) age;

方法名為initWithcName: andAge: 【注意有多個冒號】




2.3選擇器@select

每一個Objective C方法都對應一個選擇器,即SEL類型的對象。

Objective C運行時通過方法對應的選擇來定位其實現代碼。可以通過@select指令 ,傳入方法名,可以獲取該方法的選擇器

用法 : SEL initMethodSelect=@select(initWithName:age:);

用途:通常用于指定回調方法。


2.4屬性@property

語法:@property (屬性的附加特性) 類型 名稱;.m文件實現用@synthesize關鍵字。【@synthesize 屬性名稱|@synthesize 屬性名稱=成員變量名稱】


聲明:@property (nonatomic,copy) NSString *name;

實現:@synthesize name;

屬性的附加特性:


關鍵詞描述

nonatomic線程安全的,編譯器默認會生成額外的代碼以保證訪問屬性的線程安全,會犧牲一定的性能。

readonly屬性只可讀,@synthesize指令只會生成get方法還沒有set方法

readwrite默認值。可讀寫

geter=get方法名,

setter=set方法名當聲明一個屬性用@synthesize指令會生成相應的get方法和set方法,但可以通過getter和setter來手動指定get方法和set方法

assign、retain、copy


調用:對過點.來實現調用

xiaoMing.name=@”90worker”;


點語法oc2.0以后

為什么設計點語法

1、為了方便別的程序員轉到OC開發來

2、為了讓程序設計簡單化

3、隱藏了內存管理細節

4、隱藏了多線程、同步、加鎖細節



2.5@class關鍵字

@class為前向聲明

現有兩個類的聲明

Wheel代表著輪子,Bike代表著自行車,我們知道Bike是需要Wheel的

于是有以下的代碼

Bike.h

@intefrace Bike:NSObject{

Wheel * _frontWheel, *_rearWheel;


}

@end

在這里我們用到了Wheel類,那么我們到底是用#import還是用@class呢?我們用一個表格來說明#import和@class

關鍵字描述

#import將Wheel類的外部接口Wheel.h整個導入,這樣會產生編譯依賴和編譯時間的浪費。如果Bike.h中導入了Wheel.h而Bike.h文件又被很多其他的類導入 了,那么這些類也會導入了Wheel.h,一旦Wheel.h修改了,所有導入了Wheel.h的文件都發生了變化需要重新編譯。

@class1、可以有效的解除上面所說的編譯依賴。如果Wheel.h修改了,對于那些導入了Bike.h的文件并沒有發生變化所以也不需要重新編譯。使用了@class關鍵字只是在類的定義中前身引用了,但在Bike類的內部實現中還是需要導入Wheel.h的,因為可能需要使用到Wheel.h中的某些定義方法

2、可以解決循環引用





2.6self關鍵字


self表示當前引用對象

記住以下兩句話:

1、誰在執行該函數 self就表示誰

2、super表示該對象的父對象


+(int)maxAge{

//

在+類方法 (靜方法) self表示本類【抽象】 對象是具體的、實例的

}


+(id) person{

id obj=[[self alloc] init];

//用法==[[Person alloc] init]; == [[[self class ] alloc] init]

//self=Person

return obj;

}


//調用 [xxx 方法名] maxAge方法里面的self表示

int maxAge=[Person maxAge];



2.7dealloc函數


dealloc【只調用一次】

對象從內存中銷毀前夕調用的函數

在對象完全消失的時候調用 對象的計數器為0的時候會自動調用dealloc 不能人為的去調用此方法。應用這樣調用:[xx release] //release計數器1減到0 系統就會自動的調用dealloc

-(void)dealloc{

//在調用父類之前做一些處理

[super dealloc];

}



2.8 initialize函數


+(void)initialize NSObject 這個類的第一次實例化的時候調用 第一次調用alloc 或者調用init的時候就會調用 【只調用一次】 類方法在該類第一次實例化的時候調用 并且只調用一次 在這里做一些static變量的初始化操作


轉載于:https://blog.51cto.com/jiahui524/1309263

總結

以上是生活随笔為你收集整理的Objective-C学习笔记(一)–类的全部內容,希望文章能夠幫你解決所遇到的問題。

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