#import <Foundation/Foundation.h>

#import <UIKit/UIKit.h>

@interface MYOperation : NSOperation

@end

#import "MYOperation.h"

@implementation MYOperation

-(void)main

{

//不管是ARC还是MRC一定要用autorelease来释放c语言对象

@autoreleasepool {

//NSString *image=[self stringEith];

//发布通知

//[[NSNotificationCenter defaultCenter] postNotificationName:@"MYOperation" object:image];

[self stringEith];

[self downLoadImage:@"URL"];

}

}

//模拟下载 跳到主进程模拟发送通知,通知控制器更新UI

-(NSString*)stringEith

{

NSString*image= @"大坏蛋!!!!";

[[NSOperationQueue mainQueue]addOperationWithBlock:^{

[[NSNotificationCenter defaultCenter] postNotificationName:@"MYOperation" object:image];

}];

return image;

}

//下载

-(UIImage *)downLoadImage:(NSString*)str

{

NSURL *url=[NSURL URLWithString:str];

NSData *data=[NSData dataWithContentsOfURL:url];

UIImage*image=[UIImage imageWithData:data];

[[NSOperationQueue mainQueue]addOperationWithBlock:^{

[[NSNotificationCenter defaultCenter] postNotificationName:@"MYOperation" object:image];

}];

//return image;

return image;

}

@end

//控制器代码

#import "ViewController.h"

#import "MYOperation.h"

@interface ViewController ()

@property(nonatomic,strong)NSOperationQueue*queue;

@property(nonatomic,strong)NSString*str;

@end

@implementation ViewController

- (void)viewDidLoad {

[super viewDidLoad];

//发送通知的是在子进程,这里接收通知执行方法也是在子进程中执行,,发送通知是在主进程,这里接收通知执行方法也是在主进程中执行,一般情况下更新UI是在主进程中进行,所以这里我们应该默认让接收事件方法在主进程中执行\

需要在拓展类中进行操作

//注册通知事件

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(updateImage:) name:@"MYOperation" object:nil];

}

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event

{

MYOperation *operation=[[MYOperation alloc]init];

//监听

[self.queue addOperation:operation];

}

//

-(void)updateImage:(NSNotification*)notification

{

self.str=notification.object;

NSLog(@"%@ ,%@",self.str,[NSThread currentThread]);

}

//注册的通知事件一定要移除

-(void)dealloc

{

[[NSNotificationCenter defaultCenter]removeObserver:self];

}

-(NSOperationQueue*)queue

{

if (!_queue) {

_queue=[[NSOperationQueue alloc]init];

//设置最大线程数

[_queue setMaxConcurrentOperationCount:6];

}

return _queue;

}

@end

iOS NSOperation 封装 通知实现界面更新的更多相关文章

  1. iOS NSOperation

    iOS NSOperation 一.简介 除了,NSThread和GCD实现多线程,配合使用NSOperation和NSOperationQueue也能实现多线程编程 NSOperation和NSOp ...

  2. iOS开发系列文章(持续更新……)

    iOS开发系列的文章,内容循序渐进,包含C语言.ObjC.iOS开发以及日后要写的游戏开发和Swift编程几部分内容.文章会持续更新,希望大家多多关注,如果文章对你有帮助请点赞支持,多谢! 为了方便大 ...

  3. iOS push过去的时候界面不能完全退出

    iOS push过去的时候界面不能完全退出 解决方法:设置self.view.backgroundcolor 1. initWithFrame方法是什么?  initWithFrame方法用来初始化并 ...

  4. windows程序消息机制(Winform界面更新有关)

    windows程序消息机制(Winform界面更新有关) 转自:http://www.cnblogs.com/blosaa/archive/2013/05/31/3109586.html 1. Win ...

  5. iOS Notification – 远程通知

    本文讲解iOS的远程通知的基本使用,主要包括远程通知的类型,处理远程通知的场景,以及远程通知相关证书的配置等等. 一.APNs简介 APNs是苹果公司提供的远程通知的服务器,当App处于后台或者没有运 ...

  6. iOS学习——(转)iOS中关于通知的使用

    在移动端开打过程中,经常会用到通知和推送,例如有短信来了需要通知提示,手机横屏了需要通知提示,插上耳机了需要通知提示等等,我们可以根据这些通知采取对应的动作.iOS系统自身定义了很对通知,但是在开发过 ...

  7. Sprint 5 summary: UI 界面更新,Azure端部署和用户反馈分析 12/28/2015

    本次sprint主要完成的任务有对手机APP的UI界面的更新,同时对Azure客户端的部署进行了相应的学习和有关的程序设计.同时对于ALPHA release的用户反馈做出相应的分析以确定接下来工作的 ...

  8. iOS 15 Beta升级卡死在更新进程,无法启动怎么办?

    2021苹果全球开发者大会结束后,大批果粉迫不及待的尝试升级iOS 15测试版本,想第一时间体验新功能. 但是许多用户反馈升级一直卡死在"准备更新"."验证更新" ...

  9. 李洪强iOS开发之通知的使用

    李洪强iOS开发之通知的使用 01 - 在A中发送通知 02 - 在B中监听通知 03 - 在B中通知出发的方法 04 - 在B控制器viewDidLoad调用通知

随机推荐

  1. 使用Shell创建GitHub仓库

    Github的代码仓库分为2种类型: 用户自己的代码仓库 组织的代码仓库 下面就使用Shell脚本创建这2种类型的代码仓库,脚本如下 创建用户自己的代码仓库 #!/bin/bash USER_NAME ...

  2. Java开发的基础条件:

    ------------Java开发的基础条件:Java相关的基础+对编程的自己的理解+调试代码+自己的坚持 一定要谦逊,不人云亦云,不去妄言某一门语言或技术好或坏!不是哪门技术有问题,而是(不会用才 ...

  3. 网络基础之IPv4、网线、

    =========================================Internet是一个圈子,进去这个圈子就要有相应的身份,就像我们去篮球场打球,首先得是个"人"才 ...

  4. HTTP超文本传输协议-HTTP/1.1中文版

    摘要 超文本传输协议(HTTP)是一种为分布式,合作式,多媒体信息系统服务,面向应用层的协议.它是一种通用的,不分状态(stateless)的协议,除了诸如名称服务和分布对象管理系统之类的超文本用途外 ...

  5. 如何将EXCEL表导入ORACLE数据库中?【转】

    来源:https://zhidao.baidu.com/question/383828330.html?qbl=relate_question_2&word=excel%20%B1%ED%CA ...

  6. 在github上搭建hexo博客

    准备工作 安装git 系统是win10家庭版,采用git v1.9.5版本,比较简单,一路next直到finsh完成安装. 安装node.js hexo是基于node.js驱动的一款快速.简单且功能强 ...

  7. 机器学习中的相似性度量(Similarity Measurement)

    机器学习中的相似性度量(Similarity Measurement) 在做分类时常常需要估算不同样本之间的相似性度量(Similarity Measurement),这时通常采用的方法就是计算样本间 ...

  8. C++11的enum class & enum struct和enum

    C++11的enum class & enum struct和enum C++标准文档--n2347(学习笔记) 链接:http://www.open-std.org/jtc1/sc22/wg ...

  9. UEditor百度编辑器,工具栏上自定义添加一个普通按钮

    添加一个名叫“hougelou”的普通按钮在工具栏上: 第一步:找到ueditor.config.js文件中的toolbars数组,增加一个“hougelou”字符串,然后找到labelMap数组,对 ...

  10. 在Activity之间传递参数(四)

    获取Activity的返回参数(在参数(三)User的例子的基础上实现): 1.activity_the_aty.xml文件:<EditText android:id="@+id/ed ...