
下面是内存溢出 jb51.cc 通过网络收集整理的代码片段。
内存溢出小编现在分享给大家,也给大家做个参考。
@interface VIEwController ()/** 图片视图*/@property(nonatomic,weak) UIImageVIEw * imageVIEw;/** 图片数组*/@property(nonatomic,strong) NSMutableArray * imageArray;/** 存储线程*/@property(nonatomic,strong) NSMutableArray * threadArray;@end//对象方法cancle,可以在外部使用。//类方法exit,写在线程内部,结束当前现线程。//两者结合使用,使用cancle进行标记,使用exit退出@implementation VIEwController- (NSMutableArray *)imageArray{ if (_imageArray==nil) { _imageArray =[NSMutableArray array]; } return _imageArray;}- (NSMutableArray *)threadArray{ if (_threadArray==nil) { _threadArray =[NSMutableArray array]; } return _threadArray;}- (voID)vIEwDIDLoad{ [super vIEwDIDLoad]; //加载视图 [self _loadVIEws]; //开启多线程加载图片 [self _openMultiThread]; }//======加载这个,可以在主线程中加载- (voID) _loadVIEws{ for (int i=0;i<15; i++) { int col=i%3; int row=i/3; UIImageVIEw *imageVIEw=[[UIImageVIEw alloc] initWithFrame:CGRectMake(22+col*(80+45),40+row*(100+20),90,90)]; imageVIEw.backgroundcolor=[UIcolor redcolor]; [self.imageArray addobject:imageVIEw]; [self.vIEw addSubvIEw:imageVIEw]; }// 添加按钮 UIbutton * button=[UIbutton buttonWithType:UIbuttonTypeContactAdd]; button.frame=CGRectMake(0,20,20); [button addTarget:self action:@selector(btClick) forControlEvents:UIControlEventtouchUpInsIDe]; [self.vIEw addSubvIEw:button]; }//开启多线程加载图片- (voID) _openMultiThread{ for (int i=0; i<self.imageArray.count; i++) {// [NSThread detachNewThreadSelector:@selector(loadImage:) toTarget:self withObject:@(i)]; // 要存数组就不能使用类方法创建线程 NSThread * thread = [[NSThread alloc] initWithTarget:self selector:@selector(loadImage:) object:@(i)]; [thread start]; [self.threadArray addobject:thread]; }}- (voID)loadImage:(NSNumber *) number{ //取到索引 NSInteger index=[number integerValue]; Nsstring * [email protected]"http://images.cnblogs.com/cnblogs_com/kenshincui/613474/o_%d.jpg"; imageSrc=[Nsstring stringWithFormat:imageSrc,index]; NSURL * URL=[NSURL URLWithString:imageSrc]; NSData * data=[NSData dataWithContentsOfURL:URL]; UIImage *image=[UIImage imageWithData:data]; //封装model ImageModel * model=[[ImageModel alloc] init]; model.image=image; model.index=index; //如果状态为删除,则退出线程 NSThread * thread = [NSThread currentThread]; if ([thread isCancelled]) { [NSThread exit];//执行exit,后边的语句不再执行。所以不用写return //return也可以退出进程,一旦退出就不能再使用start开启 } NSLog(@"%@",thread); [self performSelectorOnMainThread:@selector(showImage:) withObject:model waitUntilDone:NO];}//回到主线程更新图片- (voID) showImage:(ImageModel *) model{ UIImageVIEw * imageVIEw=self.imageArray[model.index]; imageVIEw.image=model.image;}#pragma mark - 点击事件- (voID)btClick{// 当点击按钮时,对所有线程进行标记 for (NSThread * t in self.threadArray) { [t cancel]; }} 以上是内存溢出(jb51.cc)为你收集整理的全部代码内容,希望文章能够帮你解决所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
总结以上是内存溢出为你收集整理的NSThread中cancle与exit的使用全部内容,希望文章能够帮你解决NSThread中cancle与exit的使用所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)