ios基础——OC语法代码块的运用

MATLAB从文件读取数据 读取表单Sheet2中部分信息。 阅读详情

代码块本质上是和其他变量类似。不同的是,代码块存储的数据是一个函数体。使用代码块是,你可以像调用其他标准函数一样,传入参数数,并得到返回值。

脱字符(^)是块的语法标记。按照我们熟悉的参数语法规约所定义的返回值以及块的主体(也就是可以执行的代码)。下图是如何把块变量赋值给一个变量的语法讲解:

按照调用函数的方式调用块对象变量就可以了:
int result = myBlock(4); // result是 28
1、参数是NSString*的代码块
[cpp] view plaincopy
void (^printBlock)(NSString *x);  
printBlock = ^(NSString* str)  
{  
    NSLog(@"print:%@", str);  
};  
printBlock(@"hello world!");  
运行结果是:print:hello world!
2、代码用在字符串数组排序
[cpp] view plaincopy
NSArray *stringArray = [NSArray arrayWithObjects:@"abc 1", @"abc 21", @"abc 12",@"abc 13",@"abc 05",nil];  
NSComparator sortBlock = ^(id string1, id string2)  
{  
    return [string1 compare:string2];  
};  
NSArray *sortArray = [stringArray sortedArrayUsingComparator:sortBlock];  
NSLog(@"sortArray:%@", sortArray);  
运行结果:sortArray:(
    "abc 05",
    "abc 1",
    "abc 12",
    "abc 13",
    "abc 21"
)
3、代码块的递归调用
代码块想要递归调用,代码块变量必须是全局变量或者是静态变量,这样在程序启动的时候代码块变量就初始化了,可以递归调用
[cpp] view plaincopy
static void (^ const blocks)(int) = ^(int i)  
{  
    if (i > 0) {  
        NSLog(@"num:%d", i);  
        blocks(i - 1);  
    }  
};  
blocks(3);  
运行打印结果:
num:3
num:2
num:1
 4、在代码块中使用局部变量和全局变量
在代码块中可以使用和改变全局变量
[cpp] view plaincopy
int global = 1000;  
int main(int argc, const char * argv[])  
{  
    @autoreleasepool {  
        void(^block)(void) = ^(void)  
        {  
            global++;  
            NSLog(@"global:%d", global);  
        };  
        block();  
        NSLog(@"global:%d", global);  
    }  
    return 0;  
}  
运行打印结果:
global:1001
global:1001
而局部变量可以使用,但是不能改变。
[cpp] view plaincopy
int local = 500;  
void(^block)(void) = ^(void)  
{  
      local++;  
    NSLog(@"local:%d", local);  
};  
block();  
NSLog(@"local:%d", local);  
在代码块中改变局部变量编译不通过。怎么在代码块中改变局部变量呢?在局部变量前面加上关键字:__block
[cpp] view plaincopy
__block int local = 500;  
void(^block)(void) = ^(void)  
{  
    local++;  
    NSLog(@"local:%d", local);  
};  
block();  
NSLog(@"local:%d", local);  
运行结果:local:501
                    local:501
著作权声明:本文由http://blog.youkuaiyun.com/totogo2010/原创,欢迎转载分享。请尊重作者劳动,转载时保留该声明和作者博客链接,谢谢!

OC—基础语法 一、Objective-C语言简介 Objective-C简称Obj-C或者OC,Objective的意思就是面向对象的。OC其实就是在C语言的基础之上,封装了一层面向对象的语法,他并不是一门全新的编程语言。OC是Mac OS X系统和iOS系统的主要开发编程语言,当然马上要被Swift给替代了,然并卵,我们还是得好好学习OC,因为现在大多数公司还是使用OC来做iOS开发。 二、第一个OC程序... 阅读详情

相关推荐

iOS LiveCommunicationKit OC 实现

LiveCommunicationKit主要用于优化VoIP通话体验,适用于需要高质量语音通话功能的应用。类似的功能,允许应用程序设置为系统默认通话应用,但与CallKit不同的是,LiveCommunicationKit在锁屏状态下不会全屏弹出,也不会在。因为项目是OC版本的,所以进行了封装实现,目前已经实现OC版本,供大家使用。8.0.56版本就采用了LiveCommunicationKit接口,替换了原先的CallKit框架,以进一步提升语音通话体验‌。中引入的一个新框架,旨在优化。

carbonzhao的专栏 2772

MATLAB任务态脑网络 提取Block连接(不做Zscore)

MATLAB任务态脑网络 提取Block连接(不做Zscore) 提取任务相关block的timeseries 生成相关矩阵 转换为z矩阵 txt导出 % extract the time course of each task block, normalize them within blcoks, then concatenate acorss blocks,; % finally,calculated the FC derived from the concatenated time cours

lucyyy239的博客 550

iOS UMeng OC和Swift混编

设置Objective-C桥接文件导入SDK头文件在UMengDemo-Bridging-Header.h中加入U-Share SDK头文件://导入UMCommon的OC的头文件//导入UShare的OC的头文件//导入UMAnalytics的OC的头文件//导入UMPush的OC的头文件UMengDemo的OC和Swift的切换UMengDemo是用OC的代码编写的,同时也兼容了swift3.0的调用示例(UMengDemo不再对swift2.0做示例兼容).

2501_90230875的博客 1700

Objective-C语法之代码块(block)的使用

原文地址:http://blog.sina.com.cn/s/blog_67419c420100vl8b.html  在ios4之后,引入了代码块的特性,在gcd中会经常的用到,所以决定好好的看看代码块文档,把这块总结一下。从头开始讲解代码块。 1.声明和使用代码块 一般用^操作符声明一个块变量,并作为块的开始符。而块的本身用{}包括起来,就像下面那样。

专注移动互联网 919

「OC」自动布局Masonry的运用

笔者在前面写过关于OC自带的系统自动布局,自动布局的好处就是控件的位置都是相对的,这样即使在不同屏幕尺寸的手机之中的布局都是大致相同的,比frame布局来的更加智能。方便是方便但是我在使用的过程之中发现,使用系统自带的自动布局代码量多且过程繁琐,我们还需要了解在OC之中各个边的名字,这样子好像也不够方便。最近才知道有第三方库Masonry这个工具(难怪当时学习自动布局的时候,网上相关的资料很少)

aa2002aa的博客 1650

iOS开发面试知识整理 – OC基础 (二)

iOS | 面试知识整理 – OC基础 (二) 1.C和 OC 如何混编 xcode可以识别一下几种扩展名文件: .m文件,可以编写 OC语言 和 C 语言代码 .cpp: 只能识别C++ 或者C语言(C++兼容C) .mm: 主要用于混编 C++和OC代码,可以同时识别OC,C,C++代码 2. Swift 和OC 如何调用? Swift 调用 OC代码 需要创建一个 Target-BriBridging-Header.h 的桥文件,在乔文件导入需要调用的OC代码头文件即可 OC

Jul7day的博客 626

Matlab学习笔记1

1.函数句柄是一个可调用的MATLAB函数的关联。有了函数句柄这种关联,用户在任何情况下都可以通过函数句柄调用MATLAB函数,即使是超出正常的函数调用范围仍然可以。 函数句柄4个用途: 可以讲一个函数传递给另一个函数;可以捕获一个函数的数值供下次使用;可以在正常范围外调用函数;可以将函数句柄以.mat文件类型保存,供下次MATLAB运行使用 在函数名前加一个@符号就可以建立一个函数句柄,一...

weixin_41554795的博客 1602

操作系统知识点汇总(王道)

操作系统不论是就业还是升学都是核心的一门课程,对于大部分工科更是必修课程。本文章是对《王道操作系统》所有知识点的总结笔记,以供大家学习以及在备考期间复习使用。让我们一起把知识往脑子里旋好吗!!!......

S mile0804的博客 5万+

Block变量的的用法,使你的程序看起来清晰明了!

"font-size:24px;">为什么要使用block变量呢?   因为当我们的程序比较繁杂的时候,我们在一个函数中要调用一个函数,还需要在外边来定义,实现,很不方便,但是有了block变量我们就可以在一个函数的内部来定义一个block变量,相当于又在函数的内部来定义了一个函数.   int (^max)(int x,int y) = ^(int x,int y)//求两个数的最大值  

chenhongyi_1992的专栏 550

【驱动适配】高通sa522平台tac5x1x驱动适配全指南

本手册详细介绍了TAC5301-Q1音频编解码器在高通sa525平台Linux系统下的驱动适配流程。主要内容包括:1)TAC5301-Q1核心特性(车载级音频Codec、关键接口和功能);2)驱动适配依赖(高通声卡驱动、ALSA SoC框架等);3)I2S协议原理及主从模式说明;4)硬件准备与检查要点;5)完整的驱动移植步骤(代码移植、Kconfig/Makefile修改、设备树配置)。该手册适用于嵌入式音频开发工程师快速完成TAC5301-Q1芯片的驱动移植与验证工作。

嵌入式博哥的博客 303

混合精度训练与推理:平衡性能与效率

在深度学习领域,模型的训练和推理通常需要大量的计算资源和时间。随着模型规模的不断增大,如大型语言模型、复杂的视觉模型等,对计算资源的需求也呈指数级增长。混合精度训练与推理技术应运而生,它通过在训练和推理过程中同时使用不同精度的数据类型,在保证模型性能的前提下,显著提高计算效率,减少内存占用。本文的目的是全面介绍混合精度训练与推理技术,包括其原理、实现方法、应用场景以及相关工具和资源,帮助读者深入理解并掌握该技术,从而在实际项目中更好地平衡性能与效率。

操作系统内核探秘的博客 1068

【iOS】OC语法知识小结

在之前写项目和代码的时候,遇到许多布局的实现问题,学习后并没有写成笔记,而是放在备忘录里,这篇博客是对暑假到大二上学期以来有些遗漏的OC语法问题的归纳。

2301_80467753的博客 1613

PCL Fast Global Registration 快速全局配准(源码版)

Fast Global Registration(FGR)是一种经典的点云粗配准算法,已集成到Open3D和CloudCompare等软件中。本文介绍了该算法的源码实现及优化方法,包括如何通过修改源码直接读取点云进行配准,而不依赖文件中读取特征描述子。文章还提供了关键参数设置(如最大迭代次数、匹配距离等)。算法实现简单高效,未来计划发布基于纯PCL的版本。源码和论文链接已附上,供开发者参考。

点云侠的博客 382

iOS JS与OC交互

iOS JS与OC交互 1、UIWebView 与 JS 交互 UIWebView 在 iOS12 中已经被废弃,同时WKWebView在iOS8中已经出现。所以无特殊情况的话,我们一般应该也是用不到前者了! UIWebView 初始化: self.webView = [[UIWebView alloc] initWithFrame:self.view.bounds]; self.webView.delegate = self; [self.view addSubview:self.

kangpp的博客 2978

软考中级-软件设计师 Python基础

软考中级-软件设计师 Python知识点整理

片言可决讼,半纸能缚龙 3641

科研绘图系列:R语言绘制极坐标饼图(pie plot)

科研绘图系列:R语言极坐标饼图(pie plot)

专注生信领域 1052

iOS开发代码块-OC版

选中代码块后鼠标右键:Xcode右上角号:带User标签的是用户自定义的代码块,可以手动删除。

Kael的博客 822

Vue - 详细实现低代码平台,支持拖曳式可视化生成应用软件功能,用户通过拖拽元素、搭积木的方式创建应用(适合迭代的基础架构、低代码平台)

Vue低代码平台-拖曳式拖拉拽可视化生成应用软件,拖拽式低代码数据可视化开发平台,vue实现拖拽,拖拽式Vue组件代码生成平台,基于vue的可视化拖拽代码生成工具,Vue实现可拖拽组件的方法,一个低代码平台的前端部分,靠拖拉拽生成页面。Vue技术栈从零实现低代码可视化搭建平台示例,低代码轮子,通过拖拽就可生成Vue代码的平台来了,vue低代码平台开发相关比低代码更强大的零代码开发平台,这款低代码SAAS数据可视化工具,拖拽生成大屏。vue实现拖拽效果,Vue自由拖拽缩放组件,自定义组件(文本、图片

🏆 前端领域优质创作者 1万+

黑马程序员-IOS-OC基础-OC简介及基本语法

-------------------------------------- android培训、java培训、ios培训期待与您交流! ---------------------------------  OC简介:OC是Objective-C的简称,OC是在C语言的基础上,增加了一层最小的面向对象语法;完全兼容C语言;可以在OC代码中混入C语言代码,甚至C++代码;可以使用OC开

qq_25027273的专栏 467

库存管理系统项目部署方案(基于jdk17)

不需要安装到服务器,运维本地安装就行,主要是用来编译前端代码的。构建完成后将dist文件夹复制到服务器内。

程序员诚哥 6358

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

OC 基础入门

OC 语法基础 OC 的语法知识其实有蛮多,以下知识基础的一部分. 目录部分: 文章目录 @ 符号 在 OC 语言中,绝大部分的关键字使用的@符号开头。记住这是一个规则就好了。 字符串 在 Java 中字符串和 C 语言中字符串定义的方式是一样的。 但是在 OC 中的字符串的定义是需要添加 @ 的,在OC 中字符串类型使用的是 NSString ,相对而言添加一个 NS 前缀。 Java: "Android" "Java" OC: @"OC" @"iOS" //比如定...

秋天的博客 2807

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

OC简介与基础语法

一、OC简介     OC全称 Objective-C,它通过一套全新的语法,在C语言基础上添加了面向对象的特性。OC语法只频繁的使用方括号,而且不吝于写出极长的方法名,虽然代码冗长,但十分易读。OC完全兼容C语言,且可以在OC代码中混入C语言代码,甚至是C++代码。我们可以使用OC

爱家人,爱老婆,爱生活,爱coding,爱运动的有爱青年 1641

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

iOS学习笔记1——OC基础

目录OC语言基础OC与Cprintf与NSLog的区别函数和方法的区别方法的注意点初学常见报错情况#pragma mark的使用OC面向对象概念NString基本使用修改项目模板匿名对象descriptiongetter和setter方法super关键字 OC语言基础 OC与C OC完全兼容C, 所以可以在OC程序中编写C语言代码,并且可以将C语言的源文件和OC的源文件组合在一起生成可执行文件。 printf与NSLog的区别 NSLog会自动换行 NSLog在输出内容时会附加一些系统信息(含有对象的内存

weixin_44250824的博客 1263

iOS OC基础知识笔记

iOS OC基础知识笔记 一个NSObject对象占用多少内存? 系统分配了16个字节给NSObject对象(通过malloc_size函数获得) 但NSObject对象内部只使用了8个字节的空间(64bit环境下,可以通过class_getInstanceSize函数获得) #import <objc/runtime.h> #import <malloc/malloc.h&...

WJ的博客 1484
上一篇: mark一些代码
下一篇: iOS 创建单例
perfeter
博客等级 码龄13年 0粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值