iOS Block全面分析

http://my.oschina.net/leejan97/blog/268536

http://blog.csdn.net/enuola/article/details/8674063

?

?

注意事項
1.內聯的block中內部定義的變量 自己本身有讀寫權限
2.block內部要修改外部變量 需要將外部變量聲明__block
3.Block retain是無效的,要想保留block生命周期,可以通過copy來實現,記得release
4.被block的應用的對象,retainCount會自動加一,為了打破這種 retain circle,可以在對象前加__block,這樣block塊就不會維護這個對象了
下面的寫法如果不加上_block a無法dealloc
__block A ?a =[ [[A alloc] init] withBlock:^{
[a action];
[ a release];
}]; //這樣A的dealloc方法就會調用
@interface ViewController : UIViewViewController?
{
NSString *_string;
}
__block ViewController *controller = self; ??
_block = ^{
NSLog(@"string %@",controller->_string);
};
5.在獨立的block中不能引用self,如果需要訪問可以使用參數傳遞的方法(可以把其考慮成c+中參數傳入函數指針對應copy)**
6.不要隨便用.語法
#import <UIKit/UIKit.h> ??
@interface AppDelegate : NSObject <UIApplicationDelegate>
@property (nonatomic, strong) NSString *stringProperty; ?
@end
#import "GCDAppDelegate.h"?
@implementation AppDelegate?
@synthesize stringProperty; ?
- (void) BlockTestError{
HelloBlock myBlock= ^(void){
self.stringProperty = @"Block Objects";?
NSLog(@"String property = %@", self.stringProperty);//運行錯誤
};
myBlock();
}} ?
- (void) BlockTestCorrect{
HelloBlock myBlock= ^(void){
[self setStringProperty:@"Block Objects"];
NSLog(@"self.stringProperty = %@", [self stringProperty]); //運行ok
};
myBlock();
}} ?
@end

轉載于:https://www.cnblogs.com/woaixixi/p/5012301.html

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

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

相關文章

win7 php redis 擴展,Windows中安裝Redis及php redis擴展

Windows10環境安裝Redis:1、下載Redis安裝包&#xff1b;2、解壓到自定義目錄&#xff1b;3、windows鍵R&#xff0c;輸入cmd 進入命令行&#xff0c;進入Redis的解壓目錄&#xff1b;4、運行&#xff1a;redis-server.exe redis.windows.conf 顯示如下&#xff0c;說明啟動成功…

【原創】MVC+ZTree實現權限樹的功能

2、html代碼權限樹&#xff1a;3、JS代碼var setting {async: {enable: true,url: /RoleToPerssion/GetPerssionTree,//異步加載時的請求地址autoParam: ["roleid"],//提交參數type: get,dataType: json},check: {enable: true, //true / false 分別表示 顯示 / 不…

集合習題之列出有限集合所有子集

1、題目&#xff08;《離散數學及其應用》第6版P75 20 題&#xff09; 給出可以列出有限集合所有子集的步驟。 2、 解題思路 假設有集合A {a1, a2 … an}&#xff0c;列出其所有子集。 先列出含有1個元素的所有子集&#xff1a;{a1},{a2} … {an}然后列出含有2個元素的所有子…

C# partial 關鍵字的使用

C# 2.0 引入了局部類型的概念。局部類型允許我們將一個類、結構或接口分成幾個部分&#xff0c;分別實現在幾個不同的.cs文件中。局部類型適用于以下情況&#xff1a;(1) 類型特別大&#xff0c;不宜放在一個文件中實現。(2) 一個類型中的一部分代碼為自動化工具生成的代碼&…

oracle中的輸入 amp,Oracle之SQL學習

1.Oracle 更改會話(更改oracle中顯示日期的方式)SQL> alter session set NLS_date_formatYYYY-MM-DD;2.使用綁定變量來輸入記錄(可以重復執行&#xff0c;輸入記錄)&#xff1a;SQL> insert into test1(id,name)2 values(&id, &name);輸入 id 的值: 5輸入 name…

線段的平移和旋轉

//github不會用&#xff0c;試了很久不知道怎么上傳代碼 #include <iostream> using namespace std;#include <stdlib.h> #include <Eigen/Dense> #include <math.h> using namespace std; using Eigen::MatrixXd; int main() { int option; struct p…

我不問+你不說

閱讀原文很多事我不問你不說這就是距離我問了你不說這就是隔閡我問了你說了這就是尊重你想說我想問這就是默契我不問你說了這就是信任很多事情你看到的聽到的未必是你想象的那樣人生在世多給別人機會解釋多些向別人解釋的耐心人生會少很多遺憾不問、不說、不解釋這不是酷或有個…

怎么安裝redhat linux操作系統,紅帽RedHat Linux5系統安裝指南

介紹如何安裝linux操作系統&#xff0c;以目前市場主流的操作系統為例子進行介紹。1、放入安裝dvd光盤&#xff0c;然后啟動服務器&#xff0c;可得如下畫面&#xff1a;2、按enter鍵&#xff0c;進入如下畫面3、選擇skip&#xff0c;按enter進入&#xff0c;下面畫面&#xff…

Net中的Request和Response對象的理解

Request 和 Response 對象起到了服務器與客戶機之間的信息傳遞作用。Request 對象用于接收客戶端瀏覽器提交的數據&#xff0c;而Response 對象的功能則是將服務器端的數據發送到客戶端瀏覽器。一、Request對象的五個集合&#xff1a;QueryString&#xff1a;用以獲取客戶端附在…

研華工控機u盤啟動安裝linux系統,研華工控機怎么設置u盤啟動

本文主要介紹研華IPC如何設置u盤啟動研華IPC-610 IPC隨XP版一起安裝。有時安裝控制軟件需要在不滿意時卸載。卸載未完成&#xff0c;這使得安裝無法進行&#xff0c;因此您需要將系統恢復到相對純粹的時間。通常&#xff0c;USB磁盤啟動盤的安裝系統首先備份初始純XP作為備份&a…

UVA - 11732 strcmp() Anyone?左兄弟右兒子trie

input n 2<n<4000 s1 s2 ... sn 1<len(si)<1000 output 輸出用strcmp()兩兩比較si,sj(i!j)要比較的次數&#xff0c;結果在long long范圍內&#xff08;相同字符比較兩次&#xff0c;不相同字符比較一次&#xff0c;包括\0&#xff09; 做法&#xff1a;由于字符集…

防止SQL注入式攻擊的筆記

SQL注入式攻擊是指利用設計上的漏洞攻擊系統。如果動態生成SQL語句時沒有對用戶輸入的數據進行過濾&#xff0c;便會使SQL注入式攻擊得逞。例如用下面的SQL語句判斷用戶名和密碼&#xff1a;txtsql"select * from user_info where userid"&txtuserid &"…

linux輸入一個用戶看是否在工作,linux下的用戶管理詳解

linux下的用戶管理詳解useradd 命令詳解添加用戶想要對linux下面的帳號了解的話首先必須要了解的4個配置文件[rootlocalhost /]# cat /etc/passwd首先我們需要了解的是用戶帳號的配置信息/etc/passwd里面的內容每個字段都以:分割&#xff0c;下面我們詳細的看看每個字段的意思r…

Java命令學習系列(零)——常見命令及Java Dump介紹

Java命令學習系列&#xff08;零&#xff09;——常見命令及Java Dump介紹 一、常用命令&#xff1a; 在JDK的bin目彔下,包含了java命令及其他實用工具。 ? jps:查看本機的Java中進程信息。 ? jstack:打印線程的棧信息,制作線程Dump。 ? jmap:打印內存映射,制作堆Dump。 ? …

優秀程序員的十個習慣

在這個世界上&#xff0c;有數百萬的人熱衷于軟件開發&#xff0c;他們有很多名字&#xff0c;如&#xff1a;軟件工程師&#xff08;Software Engineer&#xff09;&#xff0c;程序員&#xff08;Programmer&#xff09;&#xff0c;編碼人&#xff08;Coder&#xff09;&…

linux下jmap 內存命令,Linux下jmap命令查看內存使用

Linux下jmap命令查看內存使用jmap -heap 1234(1234為進程號)jmap是JDK自帶的一個工具&#xff0c;非常小巧方便&#xff0c;其支持參數如下&#xff1a;-heap打印heap空間的概要&#xff0c;這里可以粗略的檢驗heap空間的使用情況。例&#xff1a;jmap -heap 12345輸出&#xf…

BZOJ3144: [Hnoi2013]切糕

題目&#xff1a;http://www.lydsy.com/JudgeOnline/problem.php?id3144 把每一條z軸都拿出來&#xff0c;s->(x,y,1),cf[x][y][1];(x,y,k)->(x,y,k1),cf[x][y][k];(x,y,r)->t,cinf 然后對于四聯通的點&#xff0c;(x,y,z)->(x,y’,z-d) 似乎這叫經典的最小割模型…

如何通俗地解釋 C、C++、C#、Java、JavaScript、HTML、Python的用處

世界上本來沒有計算機&#xff0c;工程師創造了它。為了讓告訴計算機需要做什么事情&#xff0c;工程師發明了程序設計語言。簡單粗暴的編程&#xff1a;C語言&#xff1a;用來學編程&#xff1b;C語言&#xff1a;用來使勁兒學編程&#xff1b;C#&#xff1a;用來在windows操作…

安卓linux交叉編譯,Linux Ubuntu下用Android NDK 生成獨立交叉編譯鏈

本文主要介紹使用Android NDK生成獨立交叉編譯鏈&#xff0c;然后使用獨立交叉編譯鏈編譯Android程序下載NDK下載與自己操作系統相吻合的版本 下載地址解壓到安裝目錄(如~/myndk):tar -zxvf android-ndk-r14b-linux-x86_64將NDK的根目錄生成一個環境變量打開~/.bashrcw文件&…

數據結構——各排序算法的比較

1.從時間復雜度比較   從平均時間復雜度來考慮&#xff0c;直接插入排序、冒泡排序、直接選擇排序是三種簡單的排序方法&#xff0c;時間復雜度都為O(n2)&#xff0c;而快速排序、堆排序、二路歸并排序的時間復雜度都為O(nlog2n)&#xff0c;希爾排序的復雜度介于這兩者之間。…