Block使有注意点

Block使有注意点

  在ios推出block后,apple非常推荐开发者所有。但是可能出现内存问题。

可以添加如下宏:

#ifndef    weakify
#if __has_feature(objc_arc)

#define weakify( x ) \
_Pragma("clang diagnostic push") _Pragma("clang diagnostic ignored \"-Wshadow\"") autoreleasepool{} __weak __typeof__(x) __weak_##x##__ = x; _Pragma("clang diagnostic pop")

#else

#define weakify( x ) \
_Pragma("clang diagnostic push") _Pragma("clang diagnostic ignored \"-Wshadow\"") autoreleasepool{} __block __typeof__(x) __block_##x##__ = x; _Pragma("clang diagnostic pop")

#endif
#endif

#ifndef    strongify
#if __has_feature(objc_arc)

#define strongify( x ) \
_Pragma("clang diagnostic push") _Pragma("clang diagnostic ignored \"-Wshadow\"") try{} @finally{} __typeof__(x) x = __weak_##x##__; _Pragma("clang diagnostic pop")

#else

#define strongify( x ) \
_Pragma("clang diagnostic push") _Pragma("clang diagnostic ignored \"-Wshadow\"") try{} @finally{} __typeof__(x) x = __block_##x##__; _Pragma("clang diagnostic pop")

#endif
#endif

使用时:

    @weakify(self);
    self.block = ^{
        @strongify(self);
        NSLog(@"AViewControllerAViewController %@",self);
    };
时间: 2024-10-22 16:40:35

Block使有注意点的相关文章

block使用小结、在arc中使用block、如何防止循环引用

引言 使用block已经有一段时间了,感觉自己了解的还行,但是几天前看到CocoaChina上一个关于block的小测试主题 : [小测试]你真的知道blocks在Objective-C中是怎么工作的吗?,发现竟然做错了几道, 才知道自己想当然的理解是错误的,所以抽时间学习了下,并且通过一些测试代码进行测试,产生这篇博客. Block简介(copy一段) Block作为C语言的扩展,并不是高新技术,和其他语言的闭包或lambda表达式是一回事.需要注意的是由于Objective-C在iOS中不支

ios开发之block的使用,及注意事项

转自:http://my.oschina.net/u/1432769/blog/390401 Block作为C语言的扩展,并不是高新技术,和其他语言的闭包或lambda表达式是一回事.需要注意的是由于Objective-C在iOS中不支持GC机制,使用Block必须自己管理内存,而内存管理正是使用Block坑最多的地方,错误的内存管理 要么导致return cycle内存泄漏要么内存被提前释放导致crash. Block的使用很像函数指针,不过与函数最大的不同是:Block可以访问函数以外.词法

OC 06 Block、数组高级

主要内容: ?.Block语法 ?.Block使? 三.Block实现数组排序 Block简介 Block:块语法,本质上是匿名函数(没有名称的函数) 标准C?面没有Block,C语?言的后期扩展版本,加?了匿名函数. C++.JS.Swift等语?,有类似语法,叫做闭包. Block语法和函数指针很相似. 回顾函数指针 函数指针(变量):存放函数地址(函数名)的指针变量. int (*p)(int x,int y) = sum; 函数指针类型:int (*)(int x,int y) 即:指向

inline元素、block元素

inline元素 不会独占一行,相邻的行内元素会排列在同一行内,直到一行排不下才会换行 高.行高.以及外边距和内边距不可改变 宽度就是它的文字或图片的宽度,不可改变,随元素内容变化而变化 内联元素只能容纳文本和其他内联元素 只有水平方向margin-left.margin-right.padding-left.padding-right会产生边距效果 block元素 会独占一行,默认情况下,其宽度自动填满父级元素宽度 高度.行高.以及外边距和内边距都可控制 宽度缺省时默认容器的百分之百 可以容纳

iOS学习之block总结及block内存管理(必看)

Block简介(copy一段) Block作为C语言的扩展,并不是高新技术,和其他语言的闭包或lambda表达式是一回事.需要注意的是由于Objective-C在iOS中不支持GC机制,使用Block必须自己管理内存,而内存管理正是使用Block坑最多的地方,错误的内存管理 要么导致return cycle内存泄漏要么内存被提前释放导致crash. Block的使用很像函数指针,不过与函数最大的不同是:Block可以访问函数以外.词法作用域以内的外部变量的值.换句话说,Block不仅 实现函数的

【css】HTML标签主要类型:块状元素(block)、行间元素(inline)

问题背景 当某些HTML标签使用盒模型属性时,部分属性失效? 块状元素     独占一行(是否添加width),该元素前后其他内容都要换行     直接适用盒模型的所有css属性      行间元素     不独占一行,多个行间元素可以在一行中呈现     部分适用css盒模型属性:     ·宽度.高度设置无效     ·边距设置:左右有效,上下无效 常见块状元素 标签                           说明 <div>                           

js实现选项卡

通过JavaScript实现如上选项卡切换的效果. 实现思路: 一.HTML页面布局 选项卡标题使用ul..li 选项卡内容使用div 二.CSS样式制作 整个选项卡的样式设置 选项卡标题的样式设置 选项卡内容的样式设置 一开始只显示一个选项卡内容,其它选项卡内容隐藏. 三.JS实现选项卡切换 获取选项卡标题和选项卡内容 选项卡内容多个,需要循环遍历来操作,得知哪个选项卡和哪个选项内容匹配 通过改变DOM的css类名称,当前点击的选项卡显示,其它隐藏 <!--代码一--><!DOCTYP

html5新增标签

一.语义化标签 1.没有特殊样式盒模型干净的标签 <header></header> 页眉 主要用于页面的头部的信息介绍,也可用于板块头部 <footer></footer>页脚  页面的底部 或者 版块底部 <hgroup></hgroup> 页面上的一个标题组合 一个标题和一个子标题,或者标语的组合 <hgroup> <h1>妙味课堂</h1> <h2>带您进入富有人情味的IT培训&

ReactiveCocoa(RAC)

好处:代码高聚合,方便我们管理: 编程思想:函数式响应编程: 链式编程: CaculatorMaker.h #import <Foundation/Foundation.h> #define ADD #define KVO @interface CaculatorMaker : NSObject @property (nonatomic, assign) KVO int result; // + - (instancetype)add:(int)num; ADD - (CaculatorMak