Block的回顾

RK+linux教程:RK3588 RGA硬件加速在YOLOv5图像预处理中的深度应用教程 摘要: 本教程深入解析了RK3588芯片的RGA硬件加速器在YOLOv5图像预处理中的应用。通过专用硬件设计,RGA支持图像缩放、边界填充等核心操作,结合零拷贝技术显著提升处理效率。重点分析了LetterBox算法的RGA实现,包括参数计算、边界填充和性能优化,并与传统CPU处理对比,展示了RGA在高分辨率图像处理中的优势。教程还提供了统一的预处理接口设计,便于在OpenCV与RGA方案间灵活切换,为RK3588平台的深度学习部署提供实用优化方案。 阅读详情

Block最常见的就是网络请求中,我们先写一个网络请求的类

HttpTool.h

#import <Foundation/Foundation.h>
@interface HttpTool : NSObject
-(void)loadData:(void(^)(NSString *jsonData))callBack;
@end

HttpTool.m

#import "HttpTool.h"
@implementation HttpTool
-(void)loadData:(void(^)(NSString *))callBack
{
    // 异步发送请求
    dispatch_async(dispatch_get_global_queue(0, 0), ^{
        NSLog(@"发送网络请求:%@", [NSThread currentThread]);

        // 回到主队列
        dispatch_sync(dispatch_get_main_queue(), ^{
            NSLog(@"拿到数据进行回调:%@", [NSThread currentThread]);

            // 执行回调函数
            callBack(@"json数据");
        });
    });
}
@end

然后在控制器测试:

//  ViewController.m
#import "ViewController.h"
#import "HttpTool.h"

@interface ViewController ()
@property(nonatomic,strong)HttpTool *tools;
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    self.tools = [[HttpTool alloc] init];
}

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
    [self.tools loadData:^(NSString *jsonData) {
        NSLog(@"在ViewController拿到数据:%@",jsonData);
    }];
}
@end

这里写图片描述
number = 2 说明发送网络请求确实是在子线程。

思考

基于以上代码,我们在回调方法里设置view的背景颜色,是否会造成循环引用?

    [self.tools loadData:^(NSString *jsonData) {
//        NSLog(@"在ViewController拿到数据:%@",jsonData);
        self.view.backgroundColor = [UIColor redColor];
    }];

查看控制移除的时候是否会调用dealloc方法

- (void)dealloc
{
    NSLog(@"ViewController控制销毁了");
}

为了便于测试,我们需要装进导航控制器里,但返回的时候,查看dealloc是否打印?
这里写图片描述
这里写图片描述
当从ViewController返回时,我们发现它的dealloc 方法被调用了
这里写图片描述
ViewController控制销毁了 这句是在点击了”Back按钮”之后才打印的。
这里写图片描述

以上实验说明:当前是没有循环引用的,那么什么情况下才会有循环引用呢?

让HttpTool 对象和 Block 直接强引用就可以

//  HttpTool.m

#import "HttpTool.h"

@interface HttpTool()
/**
 * 用来保存回调方法
 */
@property(nonatomic,copy) void(^callBack)(NSString *name);
@end

@implementation HttpTool
-(void)loadData:(void(^)(NSString *))callBack
{
    // 先保存回调方法
    self.callBack = callBack;

    // 异步发送请求
    dispatch_async(dispatch_get_global_queue(0, 0), ^{
        NSLog(@"发送网络请求:%@", [NSThread currentThread]);

        // 回到主队列
        dispatch_sync(dispatch_get_main_queue(), ^{
            NSLog(@"拿到数据进行回调:%@", [NSThread currentThread]);

            // 执行回调函数
            callBack(@"json数据");
        });
    });
}
@end

那么我们以往是怎么解决这种循环引用问题的呢?

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
    __weak ViewController *weakSelf = self;

    [self.tools loadData:^(NSString *jsonData) {
//        NSLog(@"在ViewController拿到数据:%@",jsonData);
        weakSelf.view.backgroundColor = [UIColor redColor];
    }];
}
在anaconda环境中使用conda命令安装cuda、cudnn、tensorflow(-gpu)、pytorch 文章目录在anaconda环境中使用conda命令安装cuda、cudnn、tensorflow(-gpu)、pytorch结论参考资料解释相关命令版本关系版本选择总结:实验 在anaconda环境中使用conda命令安装cuda、cudnn、tensorflow(-gpu)、pytorch 结论 使用conda虚拟环境 使用conda命令安装 最重要的是版本关系(python、cuda、cudnn、pytor或者tensorflow框架)的对应。 参考资料 tensorflow2.x安装 理清GPU、 阅读详情

相关推荐

Spring Boot日志可视化实战:5分钟搞定Promtail采集与Grafana查询(避坑指南)

本文详细介绍了如何通过Promtail和Grafana实现Spring Boot日志的可视化查询,提供从日志采集到高效查询的全流程实战指南,重点解决部署中的常见问题。内容包括Logback配置、Promtail日志采集、Grafana的LogQL查询技巧及生产环境优化建议,帮助开发者快速定位和解决日志问题。

weixin_42526015的博客 106

iOS开发之---block的使用(详解)

block代码块主要用于对象之间的通信(反向传值和方法传递)。 首先,我们从内存管理方面来了解一下block   block:我们称代码块,他类似一个方法。而每一个方法都是在被调用的时候从硬盘到内存,然后去执行,执行完就消失,所以,方法的内存不需要我们管理,也就是说,方法是在内存的栈区。所以,block不像OC中的类对象(在堆区),他也是在栈区的。如果我们使用block作为一个对象的属性,我们...

weixin_30810239的博客 257

JS实例(三)图片的缓慢放大和缩小

  我们经常能看到在一些网站中可以通过按钮实现对图片的放大或者缩小,也有可能是鼠标经过时图片放大。在本例中就是通过JavaScript实现图片的放大和缩小。   首先是进行简单的页面布局 1 <div class="imagedispose"> 2 <img src="1.jpeg" id="imaged" width="400px" height="3...

weixin_34235105的博客 312

block的使用(回顾)

block代码块主要用于对象之间的通信(反向传值和方法传递)。 首先,我们从内存管理方面来了解一下block block:我们称代码块,他类似一个方法。而每一个方法都是在被调用的时候从硬盘到内存,然后去执行,执行完就消失,所以,方法的内存不需要我们管理,也就是说,方法是在内存的栈区。所以,block不像OC中的类对象(在堆区),他也是在栈区的。如果我们使用block作为一个对象的属性,我们会使用关...

-此夜微凉 366

ParallelsDesktop 安装 CentOS-6.9-x86_64-minimal 教程

安装参考 tools没做 想安装的可以参考这个 mac 本机环境: 系统:macOS Catalina version 10.15.6 虚拟机软件:parallels Desktop 15 for Mac( Parallels Desktop-15.1.4(47270)) Centos镜像: CentOS-6.9-x86_64-minimal.iso https://mirrors.aliyun.com/centos-vault/6.8/isos/x86_64/ http://vault.centos.

爱吃鱼的小明的博客 955

SAP中成本估算没有找到工艺路线消息处理实例

在针对成品的标准成本核算处理过程中,系统中会经由设定好的策略来收集成品相关成本组成,最终计算出产成品的标准成本。关于成本组成,可以归纳为三个基本要素,料,工,费。即标准成本就是要知道,生产一件成品,需要消耗多少钱的原材料?消耗多少钱的人工?以及其它的间接消耗? 某日,接到CO同事的反馈,在用CK11N做产成品标准价格核算时,提示没有工艺路线确定,但该消息为绿灯,可以通过。基于业务上的谨慎,提出分析。 从提示可以看出问题与工艺路线有关。因为,成品工艺路线中设定有成品生产所耗工时,所以,在计算产成品标准

专注SAP应用技术文章写作,致力于拉近用户与系统间的距离; 6277

iOS中Block实现原理回顾

重新回顾了一下iOS内存管理一书的Block部分,为了加深一下自己对block的理解,这里将其实现总结到这篇博客。 准备工作 xcrun -sdk iphoneos clang -arch arm64 -rewrite-objc XXXX.m 使用该命令将OC写的代码改用C++来表示,所以接下来将使用此命令完成对block的探究 new一个文件DemoClass #import "DemoCl...

无聊的专栏 928

ENSP内使用wireshark进行抓包,并且解析icmp报文

前四位:54 89 98 e8 20 38 为ip报文包的mac地址也就是物理地址。一开始进行抓包是没有icmp报文的,需要我们在ensp中使用pc1请求联通pc9。协议编号后分别为:ip版本、ip首部报文长度、服务类型、ip报文总长度。最后为校验和 、源ip地址、目的ip、从08 00开始为真正的数据。我们需要实验的端口为:0/0/4,也就是抓包第三个交换机内的报文。其中显示的icmp报文就是我们需要解析的ip报文。源mac地址后跟着的就是协议编号: 08 00。根据ip报文包的结构我们进行解析。

2301_81713278的博客 2138

手把手教你学Simulink--四翼无人机滑模控制器设计与仿真

四翼无人机(Quadcopter)滑模控制(Sliding Mode Control, SMC)是一种鲁棒性很强的非线性控制方法,特别适用于存在模型不确定性和外部扰动的情况。滑模控制器通过强制系统状态进入并保持在一个预定义的滑模面上,从而实现对期望轨迹或姿态的精确跟踪。在这个教程中,我们将使用MATLAB和Simulink来设计并仿真一个基于滑模控制策略的四翼无人机系统。

MHD0815的博客 182

uniapp - 强力解决H5网页浏览器跨域问题,如何解决uniapp请求接口在浏览器跨域问题,UniApp H5 跨域代理配置详细教程完美解决所有uniapp跨域(调用第三方接口或服务器api跨域)

uni-app 跨域,uniApp解决h5跨域问题,解决uni-app请求接口在浏览器跨域问题,uni.request请求跨域问题解决方案,uni-app-跨域解决方法,彻底解决uniapp发布为H5的跨域问题,uniapp H5页面设置跨域请求_uniapp h5跨域配置,uniapp开发 H5 解决跨域问题,uniApp请求解决跨域问题,uniapp request如何实现前端请求跨域,解决uniapp调试过程中的请求跨域和环境配置,Uniapp调用外部api接口跨域请求,uni-app发布H5页面跨域

🏆 前端领域优质创作者 5352

Block 回顾总结

Block 回顾总结1.如果用Copy 或者 Strong 来修饰Block ,block 存在于堆空间,容易造成循环引用,用__weak来修饰来解决循环引用问题如果用weak来修改Block block存在于栈区 不会出现循环引用2.block不能对引用的变量进行修改,如果要修改 需要用__block来修饰要修改的变量__block int value = 3;void(^ myBlock)(i

wind_haha的博客 239

CodeQL查询时遇到报错:A fatal error occurred: Could not process query metadata for...如何解决?

🏆本文收录于 《全栈Bug调优(实战版)》 专栏,该专栏专注于分享我在真实项目开发中遇到的各类疑难Bug及其深层成因,并系统提供高效、可复现的解决思路和实操方案。无论你是刚入行的新手开发者,还是拥有多年项目经验的资深工程师,本专栏都将为你提供一条系统化、高质量的问题排查与优化路径,助力你加速成长,攻克技术壁垒,迈向技术价值最大化与职业发展的更高峰🚀!

**My Coding Family** 1083

block简单回顾

你好。 虾米在StoryBoard上添加添加两按钮,监听其点击进行录音监听测试。 话不多说。请看代码: // // JHViewController.m // 录音 // // Created by cjj on 15-10-17. // Copyright (c) 2015年 jh.chen. All rights reserved. // #import "JHView

iOS_JH的专栏 479

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

block知识点回顾

1、简介 (1)Block是OC中的一种数据类型,在iOS开发中被广泛使用 (2)^是Block的特有标记 (3)Block的实现代码包含在{}之间 (4)大多情况下,以内联inline函数的方式被定义和使用 (5)Block与C语言的函数指针有些相似,但使用起来更加灵活2、格式说明 (返回类型)(^块名称)(参数类型) = ^(参数列表) {代码实现}; 如果没有参数,等号后面参数列

小僧Coding 1037

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

swit 闭包使用,闭包和OC的block非常相似,先回顾block

此处模拟一下封装网络请求类,使用block向外面抛值 首先写网络请求工具类 +(void)networkRequestWithBlock:(void(^)(NSString *))callBack{ dispatch_async(dispatch_get_global_queue(0, 0), ^{ NSLog(@"-----发送异步网络请求"); di

ZhengYanFeng1989的博客 601

Objective-C-代码块Block回顾

OC中的代码块是iOS4.0+ 和Mac OS X 10.6+ 引进的对C语言的扩展,用来实现匿名函数的特性。类似于其他语言脚本语言或者编程语言中的闭包或者是Lambda表达式,可能第一眼看上去很怪异,不过开发的过程中会越来越多的用到Block,还是了解多一点比较好。Block方面的内容也有很多,本文从实际使用的角度大概讲一下Block的基本概念和实践。...

weixin_33804582的博客 91

hadoop基本用法回顾(Block的存储信息,fsck查看file,location)

先说一个小插曲,一开始用实验室的服务器,没有权限查看具体hdfs的没一块的block位置。由于目前是自己安装的虚拟机,就很感兴趣,想知道具体每个文件的block文件位置。使用fsck(hdfs fsck / -files -locations -blocks -racks),截图如下: 我记得配置hadoop存储数据的路径是hadoop/dfs/data,于是去找data/current/,...

beautiful_girl_love的博客 1119

Object_C 回顾 0.1.2 block函数

block Object-C

hi_chen_xingwang的博客 483

Objc-C 知识点回顾 七 block

1.Block的定义 Block:块语法,本质上是匿名函数(没有名称的函数) //Block的类型 //返回值类型(^)(参数类型1 参数名1, 参数类型2 参数名2...) //注:(1)即使没有参数, 括号也不能省略 //(2)参数名一般省略, 特殊情况为了使用方便, 参数名不省略 //int (^

周太郎的博客 600

Linux那些事儿之我是Block层(引子)

很久以前,天还是蓝的,水也是绿的,庄稼是长在地里的,猪肉是可以放心吃的,耗子还是怕猫的,法庭是讲理的,上床是先结婚的,理发店是只管理发的,药是可以治病的,医生是救死扶伤的,拍电影是不需要陪导演睡觉的,照相是要穿衣服的,欠钱是要还的,孩子的爸爸是明确的,学校是不图挣钱的,白痴是不能当教授的,卖狗肉是不能挂羊头的,男就是男的女的就是女的.那时候Block层还是一部分附属于drivers/目录下一部分附

Fybon的专栏 2067

HDFS的Block size的默认大小

今天无意中听到了同事说关于HDFS中每个block的大小,特意查了下: 从Hadoop的官网上看了各个版本的说明文档中关于 Data Blocks 的说明,发现是从2.7.3版本开始,官方关于Data Blocks 的说明中,block size由64 MB变成了128 MB的。 以下是相关连接: Hadoop 1.2.1 Hadoop 2.7.2 Hadoop 2.7.3 Hadoop 2.9.1 ...

一缕阳光的博客 8315

Linux文件系统之:通用块处理层 ll_rw_block | +往期文章回顾

《/proc 文件系统并使用/proc 进行输入》 《Linux虚拟文件系统概述》 《Linux文件系统概述:硬盘驱动>通用块设备层>文件系统>虚拟文件系统(VFS)》 《Linux内核:一文读懂文件系统、缓冲区高速缓存和块设备、超级块》 《Linux文件系统:编写一个内核文件系统》 《Linux系统C语言遍历系统文件系统,并查询其磁盘使用率(有效磁盘)》 《Linux虚拟文件系统VFS的相关数据结构和操作》 《Linux文件系统:Linux 内核文件描述符表的演变》 《Linux的文件系统

RToax 1820

Block上篇

谈到Block, 先回忆一下c语言中函数的用法 一个完整的函数包括三部分: 1.函数的声明 2.函数的定义3.函数的调用函数名就是函数的首地址 因此我们可以用指针变量来接受函数的首地址 就可以通过函数指针来调用函数 由于函数不能嵌套定义, 当我们在写工程的需要用到新函数时, 就比较麻烦; 这个时候用Block就比较方便了 Block块语法, 和函数指针的语法格式相似 1. 创

i think 255
上一篇: phar是啥?
下一篇: Swift中的闭包
学习笔记666
博客等级 码龄12年 1047粉丝 1369原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值