objective c 的performSelector 與block
//無引數 -(void)noParam; //一個引數 -(void)oneParam:(NSString *)oneParam; //兩個引數 -(void)oneParam:(NSString *)oneParam twoParam:(NSString*)twoParam; //最多支援兩個引數 [TestClass performSelector:@selector(noParam)]; [TestClass performSelector:@selector(oneParam:)withObject:@"引數1"]; [TestClass performSelector:@selector(oneParam:twoParam:)withObject:@"引數1" withObject:@"引數2"]; //多引數 //最多隻能支援兩個引數,因此多引數只能別想辦法 //比如將引數放在陣列中,然後使用一個引數的使用方法可以實現
SEL:
1、SEL其實是對方法的一種包裝,將方法包裝成一個SEL型別的資料,去找對應的方法地址。找到方法地址就可以呼叫方法
a、把test1 test2包裝成SEL型別的資料
b、根據方法地址呼叫對應的方法
SEL s1 = @selector(test1);
SEL s2 = NSSelectorFromString(@"test2");//通過NSString定義SEL
[Test performSelector:s1];
NSString *str = NSStringFromSelector(s1); //這樣[email protected] “test1”;
Blocks的定義以及使用:
int (^MySum)(int, int) = ^(int a, int b) {
return a+b;
};
int b = MySum(1,2);
Block可以訪問區域性變數,但是不能修改但是如果要修改就要在區域性變數前加關鍵字:__block
int a = 10; __block int b = 20; void (^block)(); block = ^{ NSLog(@"%d", a); // 錯誤: block不能訪問區域性變數 NSLog(@"%d", b); // 正確: block可以訪問用__block修飾的區域性變數 a = 100; // 錯誤: block不能修改區域性變數的值 b = 100; // 正確: block不能修改用__block修飾的區域性變數的值 }
Block 可以使用typedef
typedef (^MySum)(int,int);
MySum sum;
sum= ^(int a,int b) {
return a + b;
};
如果沒有形參括號可以省略
p.test = t;
void (^MyBlock)() = ^{
NSLog(@"Block");
};
MyBlock();
蘋果官方建議儘量多用block,因為效率高。
相關推薦
objective c 的performSelector 與block
//無引數 -(void)noParam; //一個引數 -(void)oneParam:(NSString *)oneParam;
Objective-C 基礎之— Block本質+源碼剖析
www IT -s 猜想 field char 源碼 等等 eof block 又稱之為“自帶變量的匿名函數”,拋開OC語法定義block的形式不談,其實好多語言都有類似的函數,比如JS的回調函數(其實就是將一個匿名還是作為函數的實參)、swift的閉
Objective-c 類與方法學習筆記
@interface Shape : NSObject { ShapeColor fillColor; ShapeRect bounds; } - (void) setFillColor: (ShapeColor) fillColor; - (void) setB
Objective-C Block與函數指針比較
其他 可執行文件 調試 objective 運行 obj 子類 函數指針 延長 相似點 1.函數指針和Block都可以實現回調的操作,聲明上也很相似,實現上都可以看成是一個代碼片段。 2.函數指針類型和Block類型都可以作為變量和函數參數的類型。(typedef定義別名
block 知識點 ---- Objective-C 高階程式設計 iOS 與 OS X 多執行緒記憶體管理 學習筆記
1. block捕捉變數: 結論:只有呼叫_Block_copy 才能持有截獲的附有 __strong 修飾符的物件型別的自動變數值。 block 中使用物件型別的自動變數時,除以下情形,推薦使用copy方法: “When the Block is returned
Objective-C Block與函式指標比較、分析
本來不應該將OC block與函式指標進行比較的,這兩者除了宣告形式上類似,都可用來實現回撥(CallBack)之外,其不同的地方會更多。 今天從一個小例子開始對Objective-C裡面函式指標和Block進行剖析。 函式指標是C語言裡面就有的,而Objec
Objective-C高階程式設計:iOS與OS X多執行緒和記憶體管理
這篇文章主要給大家講解一下GCD的平時不太常用的API,以及文末會貼出GCD定時器的一個小例子。 需要學習的朋友可以通過網盤免費下載pdf版 (先點選普通下載-----再選擇普通使用者就能免費下載了)http://putpan.com/fs/cy1i1beebn7s0h4u9/ 1.G
Objective-C語言基礎與總結
什麼是Objective-C Objective-C是C語言的一個超集,具有面向物件的特性,並具備了強大的執行時動態語言特性。 Objective-C的優缺點 優點: 作為C語言的超級,在C語言的基礎上衍生了很多新的語言特徵,封裝的很完善且使用方便,大大降低了程式設
Effective Objective-C 2.0 總結與筆記(第二章)—— 物件、訊息、執行期
第二章:物件、訊息、執行期 “物件”就是“基本構造單元”,開發者可以通過物件來儲存並傳遞資料。物件之間傳遞資料並執行任務的過程就是“訊息傳遞”。程式執行起來後,為其提供相關支援的程式碼就是“Objective-C執行期環境”,它提供了一些使得物件之間能夠傳遞訊息的重要函式,並且包括建
Effective Objective-C 2.0 總結與筆記(第一章)—— 熟悉Objective-C
第一章:熟悉Objective-C 本章主要是對Objective-C進行一個瞭解,通過介紹Objective-C的語法,來講解Objective-C的基礎知識。 第1條:瞭解Objective-C語言的起源 Objective-C語言採用“訊息結構”而非“函式呼叫”
Objective-C學習筆記-NSSet與NSDictionary
1.NSSet與NSArray的區別就是NSSet裡面的值是不可重複且無序的,在查詢速度上NSSet比NSArray更快,而NSDictionary則可以儲存鍵值對,這個鍵值對也是無序的,鍵通常是一個字串(唯一的),而值可以是任意型別的物件 2.和NSArray一樣,N
iOS Objective-C與Swift開發過程的詳細比較
前段時間,本人同時開發了兩個專案,一個用的OC,一個用的Swift。在使用中對兩種語言進行一次梳理與比較。 基礎檔案 OC Swift OC程式裡,一個類會有兩個檔案,.h和.m。.h可以寫屬性、方
Effective Objective-C 2.0 總結與筆記(第三章)—— 介面與API設計
第三章:介面與API設計 在開發應用程式的時候,總是不可避免的會用到他人的程式碼,或者自己的程式碼被他人所利用,所以要把程式碼寫的更清晰一點,方便其他開發者能夠迅速而方便地將其整合到他們的專案裡。 第15條:用字首避免名稱空間衝突 Objective-C
Objective-C Runtime 執行時之五:協議與分類
Objective-C中的分類允許我們通過給一個類新增方法來擴充它(但是通過category不能新增新的例項變數),並且我們不需要訪問類中的程式碼就可以做到。 Objective-C中的協議是普遍存在的介面定義方式,即在一個類中通過@protocol定義介面,在另外
Objective-C與Java 方法呼叫比較
Objective-C:宣告方法:-(Return-type)method:(Parameter-type)parameter1{...};多個引數時:-(Return-type)methodPart1:(Parameter-type)parameter1 methodPart2:(Parameter-typ
Swift學習之和Objective-C的聯絡與區別
swfit和OC間的區別 swift句尾不需要分號 ,除非你想在一行中寫三行程式碼就加分號隔開。 swift不要寫main函式 ,程式預設從上往下執行 swift不分.h和.m檔案 ,一個類只有.swift一個檔案 swift不在有地址的概念 swift資料
Objective-c:Block
# Block 概述 標準C裡面沒有Block, C語言的後期擴充套件版本, 加入了匿名函式; C++、JS、 Swift等語言中, 有類似語法, 叫做閉包! block語法和函式指標很相似。回顧, C語言中的指標函式: c int(*) (int x,
【Objective-C】類與結構體的區別
只能在類裡面寫方法,不能在結構體裡面寫方法類——物件,結構體——值類——引用型別 位於棧上的指標(引用)位於堆上的實體物件結構體——值型別 例項直接位於棧中拷貝行為: classname *a = b
Objective-C Runtime 執行時之一:類與物件
Objective-C語言是一門動態語言,它將很多靜態語言在編譯和連結時期做的事放到了執行時來處理。這種動態語言的優勢在於:我們寫程式碼時更具靈活性,如我們可以把訊息轉發給我們想要的物件,或者隨意交換一個方法的實現等。 這種特性意味著Objective-C不僅需要一
Objective-C Runtime 執行時之二:成員變數與屬性
在前面一篇文章中,我們介紹了Runtime中與類和物件相關的內容,從這章開始,我們將討論類實現細節相關的內容,主要包括類中成員變數,屬性,方法,協議與分類的實現。 本章的主要內容將聚集在Runtime對成員變數與屬性的處理。在討論之前,我們先介紹一個重要的概念:型別