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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Objective-C中class、Category、Block的介绍

發布時間:2023/12/18 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Objective-C中class、Category、Block的介绍 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

@class

當定義一個類,必須為編譯器提供兩組消息,第一組(接口部分.h):構建類的實例的一個基本藍圖。必須指定類名,類的超類,類的實例變量和類型的列表,最后是類的方法的聲明。第二組(實現部分.m):實現類的方法的代碼。

例如: ------------------------------ RockStar.h -------------------------------------------

#import<Foundation/Foundation.h>//?用#import呢,原因RockStar繼承NSObject類,需要知道NSObject的方法屬性等,所以用#import。

@class Banid;//這里為什么沒用#import “Banid”,導入包是把所有的信息導入,這個效率比較低,而@class只是說明Banid是一個類,在實現部分在導入包(import),效率高

@interface RockStar:NSObjtect

@end

?

-------------------------------- RockStar.m------------------------------------------------------------

#import ”RockStar.h”

#import “Banid.h”

@implementation RockStar

@end

Category分類有三個使用場景:定義一個類時某些情況系(需求變更),需要添加新的方法2、團隊合作方法的實現3、對基礎類庫中的方法的擴充,例如NSString+JSON.h為NSString這個類拓展一些解析JSON的方法

@interface Student(Text)//這是一個分類,是對Student類的拓展,對Stduent方法屬性等的補充。

@end

Protocal(協議說就是一系列方法的列表,其中聲明的方法可以被任何類實現,這種模式一般稱為代理(delegation0式,相當于java中的接口,但是協議中的方法可以部分實現,不需要全部

------------------------------TabelPrinter.h-----------------

@protocal TablePrintDataSource

@required//必需的,默認是必須的,也就是使用的類必須實現所有的方法(但也不強求也就是說你不實現編譯器也可以通過,再次強調OC是一種弱語言)

-(NSString*)stringForRowAtIndex: (int)index;

-(int) numberOfRowsInTable;

@optionl//可選的

-(NSString*) tableTitle;

-(BOOL) printLineNumber;

@end

?

@interface TablePrinter:NSObject

@property(nonatomic,assign)id<TablePrintDataSource> datasource;//這里弱引

-(void)printable;

@end

在另一個類中使用時在.h中添加@protocal TablePrintDataSource ;在.m中添加

#import “Table”

或者協議可以單獨寫出來:項目中有,別的地方用時在.h中添加@protocal TablePrintDataSource ;在.m中添加#import“TablePrintDataSource.h”

Block

Block可以訪問外面定義的變量,__block int c=20,這樣可以外部寫該外部變量,否則不可以修改,只可以使用

例子1、

int j=10;

int (^blockPtr)(int)=^(int n){return j+n}; //帶一個參數返回值為int的塊,塊是基于棧的,塊與自動變量擁有相同的生命周期。(^)脫字符

j=20;

int k=blockPtr(5);//k is 15,not 25

例子2、

Void someFunction(int (^blockArg)(int));

Int (^doubler) (int)=^(int n){return n*2};

someFunction(doubler);?

例子3、

void someFunction(int (^blockArg)(int));

someFunction(^(int n){ return n*2;});

例子4、

Void text()

{

???????? Typedef int (^Sum)(int,int);

???????? Sum sum=^(int a,int b){return a+b;};

轉載于:https://www.cnblogs.com/zhao123/p/3196717.html

總結

以上是生活随笔為你收集整理的Objective-C中class、Category、Block的介绍的全部內容,希望文章能夠幫你解決所遇到的問題。

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