域名服务器地址seo优化与推广招聘
web/
2025/10/6 22:53:30/
文章来源:
域名服务器地址,seo优化与推广招聘,中企动力官网电话,山东省城乡建设厅网站1 什么是block iOS SDK 4.0開始#xff0c;Apple引入了block这一特性。字面上说#xff0c;block就是一个代码块。可是它的奇妙之处在于在内联(inline)运行的时候(这和C非常像)还能够传递參数。同一时候block本身也能够被作为參数在方法和函数间传递。这就给予了block无限的可… 1 什么是block iOS SDK 4.0開始Apple引入了block这一特性。字面上说block就是一个代码块。可是它的奇妙之处在于在内联(inline)运行的时候(这和C非常像)还能够传递參数。同一时候block本身也能够被作为參数在方法和函数间传递。这就给予了block无限的可能。 对于闭包block),有非常多定义。当中闭包就是可以读取其他函数内部变量的函数这个定义即接近本质又较好理解。对于刚接触Block的同学会认为有些绕由于我们习惯写这种程序main(){ funA();} funA(){funB();} funB(){.....}; 就是函数main调用函数A函数A调用函数B... 函数们依次顺序运行但现实中不全是这种。比如项目经理M手下有3个程序猿A、B、C当他给程序猿A安排实现功能F1时他并不等着A完毕之后。再去安排B去实现F2而是安排给A功能F1B功能F2C功能F3然后可能去写技术文档而当A遇到问题时他会来找项目经理M当B做完时会通知M。这就是一个异步运行的样例。在这种情形下Block便可大显身手由于在项目经理M给A安排工作时。同一时候会告诉A若果遇到困难怎样能找到他报告问题比如打他手机号。这就是项目经理M给A的一个回调接口要回掉的操作。比方接到电话百度查询后返回网页内容给A。这就是一个Block在M交待工作时。已经定义好。而且取得了F1的任务号局部变量却是在当A遇到问题时才调用运行跨函数在项目经理M查询百度获得结果后回调该block。 block是一个特殊的OC对象, 它建立在栈上, 而不是堆上, 这么做一个是为性能考虑,还有就是方便訪问局部变量. 默认情况下block使用到的局部变量都会被复制,而不是保留. 所以它无法改变局部变量的值. 假设在变量面前加上__block, 那么编译器回去不会复制变量, 而是去找变量的地址, 通过地址来訪问变量, 实际上就是直接操作变量. 另外块是在栈上分配的, 所以一旦离开作用域, 就会释放, 因此假设你要把快用在别的地方, 必需要复制一份. 所以在属性定义一个快的时候须要使用copy: property (nonatomic, copy) void (^onTextEntered)(NSString *enteredText); 块是不能保留的, retain对块没有意义. 2 block 实现原理 Objective-C是对C语言的扩展block的实现是基于指针和函数指针。 从计算语言的发展最早的goto高级语言的指针到面向对象语言的block从机器的思维一步步接近人的思维以方便开发者更为高效、直接的描写叙述出现实的逻辑需求。 iOS中block实现的探究 谈Objective-C Block的实现 3 block的使用 使用实例 AcocoaTouch框架下动画效果的Block的调用 动画效果是IOS界面重要的特色之中的一个。当中CAAnimation是全部动画对象的抽象父类。作为新人使用较多的是UIView下的动画方法类方法。使用UIView下的动画有以下几个方法。 方法一设置beginAnimations 当中memberView为须要加入的子视图的视图mivc.view为子视图在使用的时候须要将这两个地方替换 须要注意的是。一定要使用[UIView commitAnimations];动画才会生效 通过[UIView setAnimationDuration:1]; 设置持续时间。 方法二 在IOS4.0后我们有了新的方法 (void)transitionWithView:(UIView *)view duration:(NSTimeInterval)duration options:(UIViewAnimationOptions)options animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion,依旧是UIView的类方法但使用到了Block对象。Block对象是一组指令能够传递像变量一样能够把它想像成C语言的函数指针。 [UIView transitionWithView:self.view duration:0.2 options:UIViewAnimationOptionTransitionFlipFromLeft animations:^{ [self.view addSubview:yellowView.view]; } completion:NULL]; B 使用typed声明block typedef void(^didFinishBlock) (NSObject *ob); 这就声明了一个didFinishBlock类型的block 然后便可用 property (nonatomic,copy) didFinishBlock finishBlock; 声明一个block对象注意对象属性设置为copy接到block 參数时便会自己主动复制一份。 __block是一种特殊类型。 使用该keyword声明的局部变量能够被block所改变而且其在原函数中的值会被改变。 C:1 使用block和使用delegate完毕托付模式有什么长处 block不同其他变量的原因在于它不是一个单一变量, 而是一个方法, 我们要传递的是一个代码块,而且这个代码块能够存在參数, 这个參数并非在定义block的时候就赋予值, 而是我们在实际执行block的时候才赋予值. 因此对于有參数的block,当我们传递过去的时候, 它的须要接收方提供对应的參数才干执行, 这么做我们就能够在A类为B类将来会发生的事件提前做优点理的方法,即使我们还没有这些事件的详细參数. 某种意义上将这样就不须要两者之间的托付关系. 托付关系就是B类发生一个事件后,通知A类,让A类再针对这个事件进行一些处理 而使用block,则是A已经提前将这个事件的处理方法告诉了B类, 等时间发生的时候, B类无需通知A类, 直接执行实现设置好的处理方法(block)就可以. 假设你在执行一个方法的时候又想告诉这种方法在某一特定情况你还要怎么做的话, 就能够使用Block. D: GCD GCD主要使用block来取代托付模式,使程序变得简洁,同一时候执行效率也得到提高. 复制代码 static int clickNum 0; self.Mylabel [[UILabel alloc]init]; while (clickNum 20) { dispatch_async(dispatch_get_main_queue(), ^{ self.Mylabel.text [NSString stringWithFormat:%d,clickNum];//UI的绘制必须在主线程中 }); [NSThread sleepForTimeInterval:1]; } 复制代码 关于block和GCD编程能够參考这篇文章 还有这篇文章 ARC和非ARC中block的差别 ARC下Block何时会从栈自己主动被拷贝到推, 以及__block和__weak的使用问题 因为Block是默认建立在栈上, 所以假设离开方法作用域, Block就会被丢弃, 在非ARC情况下, 我们要返回一个Block ,须要 [Block copy]; 在ARC下, 下面几种情况, Block会自己主动被从栈拷贝到堆: 1.被运行copy方法 2.作为方法返回值 3.将Block赋值给附有__strong修饰符的id类型的类或者Blcok类型成员变量时 4.在方法名中含有usingBlock的Cocoa框架方法或者GDC的API中传递的时候. 对于非ARC下, 为了防止循环引用, 我们使用__block来修饰在Block中有用的对象: __block id blockSelfself; self.blk^{ NSLog(%,blockSelf); //在非ARC下对于栈上的_block对象, Block不会对其复制, 只使用, 不会添加引用计数. }; 对于ARC下, 为了防止循环引用, 我们使用__weak来修饰在Block中有用的对象: __weak id weakSelfself; self.blk^{ NSLog(%,weakSelf); }; 假设要在ARC下, 为了防止循环引用, 使用__block来修饰在Block中有用的对象,仍然会被retain, 所以须要多做一些设置 __block id blockSelfself; self.blk^{ NSLog(%,blockSelf); self.blknil; //blk被释放, blk仅仅有的blockSelf也就被释放了 }; blk(); //而且一定要执行一次, 否则不能被释放 这样就使blk断开了与blockSelf的持有关系. 这么多优点是能够自己控制对self的持有时间. 只是在最新的ios版本号中, 这些会始终被已叹号形式提示存在循环引用问题. 这样的书写方式不被推荐. 除非你要在block中改动__block的指针指向. 事实上我们用使用__weak修饰符, 仅仅是不能改动对象本身, 可是能够改动对象的属性. 转载于:https://www.cnblogs.com/liguangsunls/p/6702195.html
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/88141.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!