问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

@autoreleasepool在ARC和MRC下的区别

发布网友 发布时间:2022-05-26 14:03

我来回答

1个回答

热心网友 时间:2023-10-21 00:09

block在ARC和MRC中的声明引用有些区别.

/**

block可以存储在栈中,也可以在堆中

默认存储在栈中,不需要管理内存

存储在堆中的block会对block进行retain操作

*/

//(MRC)block在堆中时,不想对block进行retain操作,前面加__block

//(ARC)前面加__weak或__unsafe_unretained

//__weak和__unsafe_unretained的区别:__weak则在释放时会对对象赋值nil,后者不会

//Block_copy使栈中的block转移到堆中,并对block会引用的对象进行retain操作

//避免block引用的对象进行retain操作,在引用对象声明时前面加__block

dog.h (NSObject类)

//block用copy来定义,这样block存在于堆中

//如果block不是copy到堆中,引用完了对象还在,但block被释放了

[objc] view plain copy print?

#import <Foundation/Foundation.h>  

@interface dog : NSObject  

@property (nonatomic, assign) int age;  

@property (nonatomic, copy) void (^myBlock)();  

@end  


2.dog.m


//引用self.age会使retainCount = 2的

//因此以__block typeof(self) mySelf = self;方式重新定义self


2.1 在block nslog中不调用d.age情况下,不需要重新定义self

2.2 在block nslog中调用d.age情况下,需要重新定义self


[objc] view plain copy print?

#import "dog.h"  

@implementation dog  

- (instancetype)init {    

if (self = [super init]) {  

self.age = 10;  

self.myBlock = ^{  

NSLog(@"%d",mySelf.age);  

};  

}  

return self;  

}  

- (void)dealloc {  

NSLog(@"dog - dealloc");  

//对定义时copy的block进行释放  

Block_release(self.myBlock);  

[super dealloc];  

}  

@end  

3.main.m文件


[objc] view plain copy print?

int main(int argc, const charchar * argv[]) {  

//3.1 block在ARC和MRC中的情况  

blockARC_MRC();  

//3.2 copy block情况  

copyBlock();     

return 0;  

}  

3.1 block在ARC和MRC中的情况


/**

block可以存储在栈中,也可以在堆中

默认存储在栈中,不需要管理内存

存储在堆中的block会对block进行retain操作

*/

//(MRC)block在堆中时,不想对block进行retain操作,前面加__block

//(ARC)前面加__weak或__unsafe_unretained

//__weak和__unsafe_unretained的区别:__weak则在释放时会对对象赋值nil,后者不会

//Block_copy使栈中的block转移到堆中,并对block会引用的对象进行retain操作

//避免block引用的对象进行retain操作,在引用对象声明时前面加__block


[objc] view plain copy print?

void blockARC_MRC(){  

__block dog *d = [[dog alloc] init];  

d.age = 12;  

NSLog(@"block引用前:d retainCount = %zd",d.retainCount);  

void (^myBlock)() = ^() {  

NSLog(@"d.age = %d",d.age);  

};  

NSLog(@"block引用后:d retainCount = %zd",d.retainCount);  

Block_copy(myBlock);  

NSLog(@"block copy后:d retainCount = %zd",d.retainCount);  

Block_release(myBlock);  

NSLog(@"block release后:d retainCount = %zd",d.retainCount);  

myBlock();  

NSLog(@"block调用后:d retainCount = %zd",d.retainCount);  

[d release];  

}  


3.2 block中引用成员变量情况

//   1.没有调用d.age时,不需要__block

//   2.调用d.age时.必须要__block


[objc] view plain copy print?

void copyBlock() {  

__block dog *d = [[dog alloc] init];  

d.age = 12;  

NSLog(@"block引用前:d retainCount = %zd",d.retainCount);  

d.myBlock = ^{  

NSLog(@"myBlock -- %d",d.age);  

};  

NSLog(@"block引用后:d retainCount = %zd",d.retainCount);  

d.myBlock();  

NSLog(@"block调用后:d retainCount = %zd",d.retainCount);  

[d release];  

}  


-- end

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
...和O3、1H216O和2H218O.下列有关说法正确的是( )A.35Cl和37Cl互称为... ...做环境分析指示物.下列说法中正确的是( )A.1H216O在相同 ...1H、2H、3H,氧也有3钟同位素:16O、17O、18O,那么水的种类最多有... 全身没力气、想睡觉怎么回事 我的乙肝检查单 请帮忙看看 帮忙看看乙肝检查报告 谢谢 万分感谢!好人一生平安 麻烦帮我看看乙肝两对半的结果 五冶集团由哪家控股 我的苹果6手机百度视频播放不了是什么原因? 高一怎么选科历生地 oc里 nsstring/ block是什么意思 穿越火线窗口化工具下载 为什么设置了代理网站还可以显示我的ip??? 600425青松建化超短线在何处可以抢反弹?拜托了各位 谢谢 三国群英传7窗口化工具下载 仙剑三窗口化工具下载 青松建化后市如何?要涨还是跌? 单机游戏窗口化工具 block为什么会造成循环引用 block调用时变量的生命周期有哪几种 ios block内改变属性怎么写 从堆栈剖析block为什么用copy iOS为什么Block的属性声明要用copy 祁门县村干部多大年龄退休 村支书退休待遇规定 对战平台推荐! 路人玩DOTA 去什么对战平台比较好? 现在什么对战平台最火 越界追踪.Crossing.Lines.S01E10.中英字幕.WEBrip.720X400-YYeTs人人影视高清完整版的种子或下载链接 [达·芬奇的恶魔.BD480P.S01E01][手机电影下载就上种子下载地址有么?感激不尽 冒险岛046版窗口化工具下载 block在arc中和mrc中的用法有什么区别 我想要K歌(曾经的你)行吗? 我想要一份K歌点唱排行榜的歌单 B驾驶证要多少岁才可以考? 一种直升飞机的抗台风固定装置,航空母舰防止直升机倾倒,那个东西叫什么啊? 生病住院的说说 济南号驱逐舰的改进改装 美国鱼叉反舰导弹有哪些实战表现? 世界上最先进的F-22猛禽隐形战机真的不能舰载吗? 开发孩子智力的玩具有哪些啊?要最有效的 照片是什么东西 照片的照是什么 学历电子备案表没有过期,要怎么重新申请 银行保函的法律适用问题,请教 联想笔记本开机黑屏显示0xc000014c怎么办 你的电脑需要修复 错误代码0xc000014c 咋办 详细些 如何写一篇感人的情书? 情书怎么写,要感人但不能常见滴 高人帮忙~~!!! 急急急急 韩国世界排名第几啊??