首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

iOS block探究(一): 基础详解你要知道的block都在这里

) { //block code } block的标志就是^,所有的block必须以^开头 returnType表示返回值类型,如果没有返回值一般使用void表示 再来看一下定义block变量的基础语法...(具体实现细节在iOS block探究(二): 深入理解中有详细介绍)这样,外部变量的修改就会影响到block内部。...block作为参数传递 在实际应用中很少有上述那样的用法,更多的是定义一个block块然后作为参数传递。...//使用typedef定义一个无返回值、有一个NSInteger类型的形参的block类型,该block名字为 CJMNumberOperationBlock typedef void (^CJMNumberOperationBlock...变量(在iOS @property探究(一): 基础详解一文中有详细介绍weak修饰符与此处含义一致),使用__weak修饰表示弱引用, 定义weakSelf不会增加self的引用计数,因此在block

92080
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    iOS中的「回调(callback)」

    本文主要参考:《Object-C 编程 Big Nerd Ranch Guide》一书第24章 本文适读对象: 想系统了解iOS中若干种回调机制的朋友; 想初步了解Block语法的朋友。...iOS中的Run loop 我们知道自己需要callback,那在iOS中,具体要怎么实现呢?...Block语法,所以这里还要写一个方法 // 方案一中,接收到通告后要执行的方法 - (void)showAlertView:(NSNotification *)note { // 弹出提示框...// 在文件顶部(#import之下)用typedef将Block重新定义为一种新的数据类型 typedef void(^YourBlockName)(id, NSString *, NSUInteger...它其实就是大括号括起来的一段代码,只是语法有点「怪异」而已,而且可以作为方法中的参数进行传递。(在Swift中,与之对应的貌似是「闭包(Closures)」)。

    3.5K30

    iOS 代码规范

    : (void(^)(NSData *data, NSError *error))completion; 这里的Block有一个NSData参数,一个NSError参数并没有返回值 typedef void...*)viewModel; 面向协议编程 如果某些功能(方法)具备可复用性,我们就需要将它们抽取出来放入一个抽象接口文件中(在iOS中,抽象接口即协议),让不同类型的对象遵循这个协议,从而拥有相同的功能。...iOS 中委托的设计 1. 要区分好代理和数据源的区别 在iOS开发中的委托模式包含了delegate(代理)和datasource(数据源)。虽然二者同属于委托模式,但是这两者是有区别的。...在UITableViewDataSource中,就有标准的数据源方法: - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView...单例不能作为容器对象来使用 单例对象不应该暴露出任何属性,也就是说它不能作为让外部存放对象的容器。它应该是一个处理某些特定任务的工具,比如在iOS中的GPS和加速度传感器。

    2.4K20

    Warning统计

    1、Block导致的循环引用 去除一方强引用即可 2、Block引起的循环引用误报 查看Marsony源码 - (NSArray *)mas_makeConstraints:(void(^)(MASConstraintMaker...同样还有这种情况的有遍历的block;GCG的block、UIView animationBlock; 解决方案 2.1、将下划线形式_的实例变量变成点语法 // make.left.mas_greaterThanOrEqualTo...解决方案 3.1、加一个void参数 3.2、全部忽略 4、未被使用的变量 Unused variable ‘xxxx’ 减少此类Warning有利于节省内存 5、指针未添加nullable标识...long NSInteger; typedef unsigned long NSUInteger; #else typedef int NSInteger; typedef unsigned int...’ is only available on iOS 11.0 or newer 加一个判断 if (@available(iOS 11.0, *)){} else{} 10、库支持的版本过高 warning

    69210

    iOS-代码规范

    : (void(^)(NSData *data, NSError *error))completion;B 这里的Block有一个NSData参数,一个NSError参数并没有返回值 typedef void...*)viewModel; 面向协议编程 ---- 如果某些功能(方法)具备可复用性,我们就需要将它们抽取出来放入一个抽象接口文件中(在iOS中,抽象接口即协议),让不同类型的对象遵循这个协议,从而拥有相同的功能...iOS 中委托的设计 ---- 1. 要区分好代理和数据源的区别 在iOS开发中的委托模式包含了delegate(代理)和datasource(数据源)。虽然二者同属于委托模式,但是这两者是有区别的。...在UITableViewDataSource中,就有标准的数据源方法: - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView...单例不能作为容器对象来使用 单例对象不应该暴露出任何属性,也就是说它不能作为让外部存放对象的容器。它应该是一个处理某些特定任务的工具,比如在iOS中的GPS和加速度传感器。

    2.2K20

    iOS翻页视图控制器UIPageViewController的应用

    iOS翻页视图控制器UIPageViewController的应用 一、引言     UIPageViewController是iOS中少见的动画视图控制器之一,通过它既可以创建类似UIScrollView...,枚举如下: typedef NS_ENUM(NSInteger, UIPageViewControllerTransitionStyle) {     UIPageViewControllerTransitionStylePageCurl...上面初始化方法中的UIPageViewControllerNavigationOrientation属性设置翻页的方向,枚举如下: typedef NS_ENUM(NSInteger, UIPageViewControllerNavigationOrientation...属性有些难于理解,其枚举如下: typedef NS_ENUM(NSInteger, UIPageViewControllerSpineLocation) {     //对于SCrollView类型的滑动效果... NS_AVAILABLE_IOS(6_0); 五、UIPageViewControllerDelegate中方法解析 //翻页视图控制器将要翻页时执行的方法 - (void)pageViewController

    2.2K10

    iOS中表视图(UITableView)使用详解

    iOS中UITableView使用总结 一、初始化方法 - (instancetype)initWithFrame:(CGRect)frame style:(UITableViewStyle)style...;   这个方法初始化表视图的frame大小并且设置一个风格,UITableViewStyle是一个枚举,如下: typedef NS_ENUM(NSInteger, UITableViewStyle)...scrollPosition参数决定定位的相对位置,它使一个枚举,如下: typedef NS_ENUM(NSInteger, UITableViewScrollPosition) {     UITableViewScrollPositionNone...:(UITableViewRowAnimation)animation; animation参数是一个枚举,枚举的动画类型如下 typedef NS_ENUM(NSInteger, UITableViewRowAnimation...IOS为我们提供了下面两个函数解决这个问题: 开始块标志 - (void)beginUpdates; 结束快标志 - (void)endUpdates;  我们可以将我们要做的操作全部写在这个块中,那么

    1.4K30

    iOS 面试策略之语言工具-Objective-C

    加分回答: 内存泄漏可以用 Xcode 中的 Debug Memory Graph 去检查: [image] 同时 Xcode 也会在 runtime 中自动汇报内存泄漏的问题: [image] 3.请说明并比较以下关键词...关键词:#回调 在 iOS 开发中,block 和代理都是回调的方式。...下面是正确的代码: typedef NS_ENUM(NSInteger, CustomerType){ CustomerTypeNormal; CustomerTypeVIP; }; @Interface...上面的代码中,两个指针指向不同的对象,尽管它们的值相同。但是 iOS 的编译器优化了内存分配,当两个指针指向两个值一样的 NSString 时,两者指向同一个内存地址。...runloop 中的 mode 主要用来指定事件在 runloop 中的优先级,有以下几种: Default(NSDefaultRunLoopMode):默认,一般情况下使用; Connection(NSConnectionReplyMode

    68420

    Object-C中的黑魔法

    自己一直对于系统的很多语法很好奇,就是系统的宏定义语法,不知道干什么的,今天研究一下,以后可以能继续的追加。错误的地方请大神指正留言,我会尽快的修改!...但是OC里面没有这个特征,因为在XCODE6.3之后出现新的关键词定义用于OC转SWIFT时候可以区分到底是什么类型 __nullable && ___nonnull __nullable指代对象可以为...,也增加了两个相应的特性,因此上例中的items属性可以如下声明: @property (nonatomic, copy, nonnull) NSArray * items; 当然也可以用以下这种方式:...不过,为了安全起见,苹果还制定了几条规则: typedef定义的类型的nullability特性通常依赖于上下文,即使是在Audited Regions中,也不能假定它为nonnulla。...(2_0,7_0) 代表开始于IOS2.0废弃于IOS7.0 也就是>=2.0 <=7.0 __TVOS_PROHIBITED 代表这个枚举或者类,方法,参数在TVOS系统上面不能使用 typedef

    1.3K10

    iOS相机、麦克风等权限的判断与设置

    一、iOS应用权限检测 在涉及到这个问题的时候,首先为了适配iOS10系统,我们必须首先在info.plist文件中声明将要用到的权限,否则将会引起崩溃如下: “This app has crashed...1.相机与麦克风 检测相机与麦克风权限需要导入AVFoundataion框架 #import /** //相机、麦克风的授权状态 typedef...相机授权成功执行的方法 @param noPermission 相机授权失败或者未授权执行的方法 */ + (void)checkCameraAuthorizationGrand:(void (^...#import //相册的授权状态 typedef NS_ENUM(NSInteger, PHAuthorizationStatus) { PHAuthorizationStatusNotDetermined...应用跳转权限设置 在iOS8以后的系统中,跳转设置使用如下方法: + (void)requetSettingForAuth{ NSURL *url = [NSURL URLWithString:

    3.8K60

    从NSInteger说开去

    坏习惯的开端 初写iOS时,我做的是把原项目从Android端移植到iOS端。因为涉及到不同语言,又因为不熟悉iOS,加上还要与用C写的网络库进行纠缠,我小心翼翼的用了基本数据类型完成大多数编码。...当时就索性一股脑的用C语言的基本数据类型去做了。现在想想我入门iOS的过程真是坎坷呢,留下了一堆烂毛病。 不过好在我现在开始拼命的多看资料,一点点把走的弯路走回来。...这里不得不吐槽一下这本书,当初就是看这本书了解O-C语法的,可书上的介绍与代码全是int的,完全没见NSInteger的影子。可见学习这事不能只靠一本书,毕竟书的内容覆盖面有限。...TARGET_OS_IPHONE) || TARGET_OS_WIN32 || NS_BUILD_32_LIKE_64 typedef long NSInteger; typedef unsigned...long NSUInteger; #else typedef int NSInteger; typedef unsigned int NSUInteger; #endif 这段定义是说如果程序是在64位系统下运行的

    96410

    iOS UITableViewCell使用详解

    iOS中UITableViewCell使用详解 - (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString...*)reuseIdentifier; Cell的初始化方法,可以设置一个风格和标识符,风格的枚举如下: typedef NS_ENUM(NSInteger, UITableViewCellStyle)...(cell最右侧显示的视图) 枚举如下: typedef NS_ENUM(NSInteger, UITableViewCellAccessoryType) {     UITableViewCellAccessoryNone...)willTransitionToState:(UITableViewCellStateMask)state; cell状态将要转换时调用的函数,可以在子类中重写 - (void)didTransitionToState...:(UITableViewCellStateMask)state; cell状态已经转换时调用的函数,可以在子类中重写,状态枚举如下: typedef NS_OPTIONS(NSUInteger, UITableViewCellStateMask

    1.1K20

    iOS视频功能模块的开发 原

    iOS视频功能模块的开发 一、使用MPMoviePlayerController进行视频播放         MPMoviePlayerController是iOS中进行视频播放开发的一个控制类,里面涵盖了视频播放中大部分的需求功能...,枚举如下: typedef NS_ENUM(NSInteger, MPMovieRepeatMode) {     MPMovieRepeatModeNone,//播放结束后不循环     MPMovieRepeatModeOne...,枚举定义如下: typedef NS_ENUM(NSInteger, MPMovieScalingMode) {     MPMovieScalingModeNone,       // 无缩放     ...,枚举如下: typedef NS_ENUM(NSInteger, MPMovieSourceType) {     MPMovieSourceTypeUnknown,//类型未知     MPMovieSourceTypeFile...获取视频某一些时间点的缩略图,参数枚举如下,生成缩略图的数据回调在后面的通知中详说: typedef NS_ENUM(NSInteger, MPMovieTimeOption) {     MPMovieTimeOptionNearestKeyFrame

    1.1K70

    iOS中Block的用法,举例,解析与底层原理(这可能是最详细的Block解析)

    1.2 带有自动变量 关于“带有自动变量(局部变量)”的含义,这是因为Block拥有捕获外部变量的功能。...Block语法大全 ---- 约定:用法中的符号含义列举如下: return_type 表示返回的对象/关键字等(可以是void,并省略) blockName 表示block的名称 var_type...的文件中直接(不推荐)或在其导入的头文件中间接写入以下宏定义: //----------------------强弱引用---------------------------- #ifndef weakify...");}; int main() { } block语法的表达式中没有使用应截获的自动变量时 int(^block)(int count) = ^(int count) { return...block语法的表达式中使用截获的自动变量时 NSInteger i = 10; block = ^{ NSLog(@"%ld", i); }; block; 设置在栈上的block,如果其作用域结束

    1.9K30

    iOS使用UIImagePickerController调用系统相机、相册与图库

    : //判断是否支持某个数据提供类型 /* UIImagePickerControllerSourceType枚举定义如下: typedef NS_ENUM(NSInteger, UIImagePickerControllerSourceType...:(UIImagePickerControllerSourceType)sourceType; //判断所支持的相机设备 /* typedef NS_ENUM(NSInteger, UIImagePickerControllerCameraDevice...NS_AVAILABLE_IOS(4_0); //判断相机设备支持的媒体模式 /* 返回值为如下枚举: typedef NS_ENUM(NSInteger, UIImagePickerControllerCameraCaptureMode..._0, 3_0); //相机录像或者从图库相册选择视频完成后触发的回调方法 info字典中是具体信息 - (void)imagePickerController:(UIImagePickerController...- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker; 上面方法中的编辑字典与信息字典中,约定好了一些键值对

    2.4K10
    领券