**塊本質上是和其他變數類似。不同的是,**塊儲存的資料是乙個函式體。使用**塊是,你可以像呼叫其他標準函式一樣,傳入引數數,並得到返回值。
脫字元(^)是塊的語法標記。按照我們熟悉的引數語法規約所定義的返回值以及塊的主體(也就是可以執行的**)。下圖是如何把塊變數賦值給乙個變數的語法講解:
按照呼叫函式的方式呼叫塊物件變數就可以了:
int result = myblock(4); // result是 28
[cpp]view plain
copy
void
(^printblock)(nsstring *x);
printblock = ^(nsstring* str)
; printblock(@"hello world!"
);
執行結果是:
print:hello world!
[cpp]view plain
copy
nsarray *stringarray = [nsarray arraywithobjects:@
"abc 1"
, @"abc 21"
, @"abc 12"
,@"abc 13"
,@"abc 05"
,nil];
nscomparator sortblock = ^(id string1, id string2)
; nsarray *sortarray = [stringarray sortedarrayusingcomparator:sortblock];
nslog(@"sortarray:%@"
, sortarray);
執行結果:
sortarray:(
"abc 05",
"abc 1",
"abc 12",
"abc 13",
"abc 21")
3.最為關鍵是物件之間的傳值操作
typedef
void
(^myblock)(
nsstring
*str,
intnum);
/// 1. 宣告
@property
(nonatomic
,strong
)myblock
selectbuttonatindex;
// 定義變數
typeof
(self
)__weak
weak =
self
; //
在需要的地方傳值
weak.
selectbuttonatindex
(sender.
titlelabel
.text
,sender.
tag);
xiao.
selectbuttonatindex
= ^(
nsstring
* num,
intcount) ;
二、protocol(協議)
(一)簡介
5.oc不能繼承多個類(單繼承)但是能夠遵守多個協議。繼承
(:),遵守協議(
) 6.基協議:
是基協議,是最根本最基本的協議,其中宣告了很多最基本的方法。
7.協議可以遵守協議,乙個協議遵守了另乙個協議,就可以擁有另乙份協議中的方法宣告。
用法 (1)xx.h
#import
///
宣告協議
@protocol
mainviewcontrollerdelegate <
nsobject
> -(
void
)dissmiss;
@end
@inte***ce
mainviewcontroller :
uiviewcontroller
///
定義協議屬性
@property
(nonatomic
, assign)id
<
mainviewcontrollerdelegate
>delegate;
@end
xx.m
-(void
)buttonaction
}
黑馬程式設計師 block 和 protocol的使用
一 block 1.block 是在函式執行時,儲存的一段 block是同函式一樣是有返回值的,並且可以帶形參。下面的例子是分別展示了無引數和有引數,有無返回值的block的具體實現 沒有引數,沒有返回值的block的定義,且後面函式體的小括號在無引數是可以省略 void myblock void ...
block塊的獲取
用流copy獲取第二個block塊的內容 public void downloadbyseek throws illegalargumentexception,ioexception 建立輸出流,指定位置.fileoutputstream fostream new fileoutputstream ...
block塊的學習
塊block 塊的預設大小128m 塊的副本數3 配置檔案 hdfs site.xml 配置資訊從官網查詢 瀏覽器輸入hadoop.apache.org 點選learn more 出來以下頁面病點選single node setup 單節點部署 點選單節點部署以後出來以下頁面,在最左下角查詢相關檔案...