Delegate (协议也就是protocol):
1. 声明Delegate: (通常写在一个.h文件中,这样容易import)
@protocol xxxDelegate <ParentClass>
@optional - (return_type) methodName:(certain_type) args; /
文章目录概述Block的声明、赋值实现、调用定义Block类型ARC模式下简单应用Block 和 变量Block访问局部变量问题Block访问全局变量、静态变量问题ARC下的内存管理补充总结 概述上图就是一个block简单使用,它包括了block的声明、赋值实现、调用 三个部分,其中,实现部分可以看作是一种匿名函数;跟函数一样,block也是需要调用才能执行内部代码的;赋值的行为又让block看
转载
2023-08-25 09:50:25
63阅读
## 如何实现“iOS block为空”
### 一、问题描述
在iOS开发中,我们经常会使用block来处理异步任务或者回调函数。block是一个匿名函数,可以作为参数传递给其他函数或者方法。
有时候,我们需要判断一个block是否为空,以避免在调用block之前出现崩溃的情况。本文将介绍如何判断iOS中的block是否为空,并给出相应的代码示例。
### 二、实现步骤
下面是实现“i
原创
2023-10-25 14:56:06
55阅读
本文作者主要参考Kazuki Sakamoto,Tomohiko Furumoto著,黎华译的《Objective-C高级编程:iOS与OS X多线程和内存管理》一书。在平时工作中遇到不少关于Block的相关困惑,比如:Block的循环引用问题。于是在反复阅读了该书籍后,决定总结一篇关于Block的相关文章。如果还想深入了解Block,作者建议直接阅读上述书籍。由于作者水平有限,文章难免存在纰漏,
转载
2023-07-04 13:04:16
97阅读
前言很多人在面试的时候都会被问到Block,那么Block分为哪几种类型呢? 其实Block共有6种类型,其中三种常用级别,分别是:_NSConcreteGlobalBlock _NSConcreteStackBlock _NSConcreteMallocBlock,三种系统级别 ,分别是_NSConcreteAutoBlock _NSConcreteFinalizingBlock _NSConc
## 实现“iOS Block 地址为空”的方法
作为一名经验丰富的开发者,我将会教你如何实现“iOS Block 地址为空”。在这个过程中,我将会为你详细解释每一个步骤,并给出相应的代码示例。
### 流程图
```mermaid
journey
title 实现“iOS Block 地址为空”的方法
section 开始
开发者准备
小白准
原创
2024-02-25 06:25:32
40阅读
前言先说明一下,因为ARC下系统会对block做一些拷贝和释放操作,对深入于理解block无益,所以本篇文章所提到的栗子编译环境均为MRC。首先引用《Objective-C高级编程》Blocks章节中的第一句话:Blocks是对C语言的扩充功能。而且OC是建立在C语言基础上之上,添加了面向对象机制的一门编程语言。所以不要再说block的实现原理是C++的函数指针了,正确答案是:block的实现原理
转载
2023-07-04 17:01:11
366阅读
在上一篇–select函数,学习总结了一下select方法的特性,但也提到了select函数的一个缺点:文件描述符的个数是有限的。在linux系统中,默认最大值为1024。poll函数作为另一种I/O复用技术,突破了文件描述符个数的限制。一、poll函数介绍相比于select,poll函数和内核交互的数据结构也有所改变。其函数原型如下:int poll(struct pollfd *fds, un
# 判断iOS中的block是否为空
在iOS开发中,我们经常会用到block作为回调函数,但有时候我们需要判断一个block是否为空,以避免出现空指针异常。本文将介绍如何判断iOS中的block是否为空,并给出相应的代码示例。
## 判断block为空的方法
在iOS中,我们可以使用`!`操作符来判断一个block是否为空。当一个block为空时,它的值为`nil`,因此我们可以通过判断b
原创
2024-03-04 05:05:10
37阅读
block存储区域首先我们得明白iOS系统存储有哪几大内存区域:1、栈区 由编译器自动分配并释放,存放函数的参数值(实参),局部变量等。栈是向低地址扩展的数据结构,是不连续的内存区域,采用后进先出(LIFO )。优点是快速高效,缺点时有限制,数据不灵活。2、堆区 由程序员分配和释放,如果程序员不释放,程序结束时,可能会由操作系
转载
2023-08-01 21:33:45
75阅读
看了一篇大神总结的文章, 归纳出以下几点: Apple声明方法时有很好的命名习惯(这也是我们精通iOS开发的一项必备技能)。例如:一个以NSString为参数的方法,方法的selector就会有String字眼,像initWithString;dateFromString;StartSpeaingString。当Apple的方法使用blo
转载
2023-10-09 15:37:45
61阅读
规则,可以帮助在我们在自己的代码中做相同选择。 要找出Apple使用delegate的场景很简单,我们只要搜索官方文档中的“delegate”,就会获取到很多使用delegation的类。 但是搜索Apple中有关使用blocks的文档就有点困难了,因为我们不能直接搜索文档中的“^” 。然而,Apple声明方法时有很好的命名习惯(这也是我们精通iOS开发的一项必备技能)。例如:一个以NSStrin
转载
2023-11-18 18:28:09
62阅读
block的类型block有三种类型:堆block,栈block,全局block。 对于这三种类型的block遵循俩个原则: block如果没有使⽤外部变量,或者只使⽤静态变量和全局变量,那⼀定是全局blcok。 block如果使⽤了外部变量,⽽且不是静态变量或全局变量,如果赋值给强引⽤的是堆block, 如果赋值给弱引⽤的是栈blcok。为什么block要⽤copy关键字修饰因为block在创建
转载
2023-07-04 13:04:25
79阅读
## 实现“ios block方法参数可以为空”教程
### 流程图
```mermaid
flowchart TD
A(定义block方法) --> B(参数为空处理)
B --> C(调用block方法)
```
### 表格
| 步骤 | 操作 |
| --- | --- |
| 1 | 定义带有block参数的方法 |
| 2 | 处理block参数为空的情况 |
原创
2024-03-22 06:24:43
118阅读
一、block的基本语法与使用概述 Block是苹果在iOS4开始引入的对C语言的扩展,用来实现匿名函数的特性,Block是一种特殊的数据类型,其可以正常定义变量、作为参数、作为返回值,特殊地,Block还可以保存一段代码,在需要的时候调用,目前Block已经广泛应用于iOS开发中,常用于GCD、动画、排序及各类回调。block的申明,跟C语言中的函数申明类似void (^blockName) (
转载
2024-09-04 17:10:28
26阅读
1.block结构先看源码://用于描述块对象的>标志 flags
enum {
BLOCK_DEALLOCATING = (0x0001), // runtime
BLOCK_REFCOUNT_MASK = (0xfffe), // runtime
BLOCK_NEEDS_FREE = (1 << 24), // ru
转载
2023-11-13 09:55:40
58阅读
block是对象,它封装了一段代码,这段代码可以在任何时候执行。block可以作为函数参数或者函数的返回值,而其本身又可以带输入参数或返回值。它和传统的函数指针很类似,但是有区别:block是inline的,并且它对局部变量是只读的。 Block的定义: int (^myBlock) (int a,int b) = ^(int a,int b){
return a+b;
转载
2023-09-19 21:37:30
62阅读
概述代码块Block是苹果在iOS4开始引入的对C语言的扩展,用来实现匿名函数的特性,Block是一种特殊的数据类型,其可以正常定义变量、作为参数、作为返回值,特殊地,Block还可以保存一段代码,在需要的时候调用,目前Block已经广泛应用于iOS开发中,常用于GCD、动画、排序及各类回调block 会在编译过程中,会被当做结构体进行处理。 其结构Block-ABI-Apple大概是这样的:st
转载
2023-09-19 21:41:51
91阅读
今天整理了一下关于block的问题总结,block 说白了就是代码块,在Swift里面叫作闭包,block 只是 Objective-C 对闭包的实现,并不是 iOS 独有的概念,在 C++、Java 等语言也有实现闭包,名称不同而已,将同一逻辑的代码放在一个块,使代码更简洁紧凑,广受开发者欢迎。但同时 block 也是 iOS比较难理解的地方,因此有必要了解下 block 的实现原理,知其然,更
转载
2023-09-19 21:37:15
50阅读
欢迎回到 在 iOS 5 中使用 Block 系列教程 – 我们已经有了一些 Storyboard/Interface Builder 方面的实践! 在这个教程的第一部分,我们用 iOS 5 中的 Storyboard 创建视图并且建立了一个很好看的界面, 和你在右边看到的那张截图差不多。 在这第二部分也是这个系列的最后一部分中,我们要使用 Block了! 我们将会讨论 Block 究竟是什