IOS 回调函数实现方法

iOS开发-网络-合理封装请求接口 概述 如今大多App都会与网络打交道,作为开发者,合理的对网络后台请求接口进行封装十分重要。本文要介绍的就是一种常见的采用回调函数(方法)的网络接口封装,也算的是一种构架吧。 这个构架主要的idea是这样的,把所有的接口封装成一个类,在工程中随时可以调用。并且利用代理Delegate构建回调方法(callBack),工程中随处可以通过回调方法监听网络请求的反馈,也就是说,一旦得到了服务 阅读详情

IOS中实现回调的三种方式

经常使用到的两种类
   业务逻辑类:控制主要的业务逻辑 数据获取和加工
         
 工具类:进行网络连接 获取网络资源类耗时操作等

1.协议+代理


UtilNetWork.h 文件
@protocol GetDataFromServerDone;

@interface UtilNetWork : NSObject
+(
void) getJSonDataFromServer:(NSString*)query object:(id<GetDataFromServerDone>) delegate;
@end

@protocol GetDataFromServerDone
- (
void) GetJSonDataFromServer:(id) data;
@end


UtilNetWork.m  文件
#import "UtilNetWork.h"
#import
 "AFJSONRequestOperation.h"

@implementation UtilNetWork
+ (
void) getJSonDataFromServer:(NSString*)query  object:(id<GetDataFromServerDone>) delegate
{
   
 __block NSDictionary  *result = nil;
   
 NSURL *serverURL = [NSURL URLWithString:query];
   
 NSURLRequest *request = [NSURLRequest requestWithURL:serverURL];
   
   
 AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request
                                        
 success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON)
                                         {
                                             result  = (
NSDictionary *)JSON;
                                             [delegate
 GetJSonDataFromServer:result];
                                         }
                                        
 failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON)
                                         {
                                             [delegate
 GetJSonDataFromServer:nil];
                                         }];
    [operation 
 start];
}
@end 

     UtilNetWork类负责连网操作的工具类,用来从指定的服务器获得JSon 数据。
     在.h文件中定义了协议接口,任何想使用该类进行JSon获取的业务逻辑类必须要实现  GetDataFromServerDone这个协议,当从网络获取jSon数据后会回调用业务逻辑类实现的该方法。例如可以对获取到的JSon数据进行解析等。

2.使用代码块

 IOS NSFoundation类库中大量使用了代码卡,例如NSArray和NSDictionary类里用于枚举数据元素的函数,NSURLConnection类的连网操作函数等。
 我们也可以仿照其来定义自己的回调函数,把一些简单的逻辑操作封装到代码块中,当异步调用函数返回后会自动调用代码块。

 例如:

typedef void (^Success)(NSMutableArray *resultArray);
typedef void (^Faile)(NSString *errorMsg);

@interface GASSFlightPlanParse : NSObject<GetDataFromServerDone]] > 
{
   
 NSMutableArray *_flightPlanObjects;
   
 Success sucessBlock;         
   
 Faile  faileBlock;
}

@property (nonatomic,strong) NSMutableArray *flightPlanObjects;

- (
id)  initWithObjectByDate:(NSString *) date
             completionBlock:(
void(^)(NSMutableArray* resultArray)) success
                   failBlock:(
void(^)(NSString *errorMsg)) fail;
@end

    该类是一个飞行计划的解析类,用来将从服务器获得指定日期的JSon数据封装成对象存储到flightPlanObjects数组中返回给业务逻辑类。
业务逻辑类调用初始化函数时,会传入两个代码块来处理当获取成功和失败的时候的操作。
    当获取数据成功时,工具类通过调用代码块sucessBlock将数组flightPlanObjects传回给业务逻辑类;    
    当获取数据失败时,工具类会通过调用faileBlock将errorMsg传递给业务逻辑类。

下面时业务逻辑类的调用工具类的代码:
- (void) getFlightPlaneByDate
{
    [
self.searchBar setText:self.searchText];
   
 NSString *date = [self.searchText stringByReplacingOccurrencesOfString:@"-" withString:@""];
   
   
 void (^Success)(NSMutableArray *result) = ^(NSMutableArray *result)
    {
       
 dispatch_queue_t mainQueue = dispatch_get_main_queue();
       
 dispatch_async(mainQueue, ^
        {
           
 if ([result count] == 0)
            {
                [
self alterMessage:NSLocalizedString(@"NoFlightPlanData", @"")];
               
 return;
            }
           
 if (self.flightPlanObjectsArray!= nil)
            {
                [
self.flightPlanObjectsArray removeAllObjects];
               
 self.flightPlanObjectsArray = nil;
            }
            [
self.flightPlanObjectsArray addObjectsFromArray:result];
           
           
 self.selectedIndexPath = -1;
            [
self.myTableView reloadData];

        });
    };
   
   
 void (^Fail) (NSString *errorMsg) = ^(NSString *errorMsg)
    {
       
 dispatch_queue_t mainQueue = dispatch_get_main_queue();
       
 dispatch_async(mainQueue, ^{
           
            [
self  alterMessage:errorMsg];
        });
    };
   
 GASSFlightPlanParse *parse = [[GASSFlightPlanParse alloc] initWithObjectByDate:date completionBlock:Success failBlock:Fail];
    parse =
 nil
;
}

通过以上代码可以看到,当获取数据成功是Success代码块通过使用工具类传入的参数将结果保存到自己的数组里。同时,当失败的时候会在主线程中显示由工具类传入的错误消息
在这里代码块不仅封装了代码,而且还封装了数据,将业务逻辑类中的数据。


3.NSNotificationCenter
这种方法的使用比较简单,业务逻辑类只需要添加想要监听的Oberver, 然后工具类完成相应的操作后会想消息中心发送相应的消息,从而实现业务逻辑类和工具类之间的异步通信。
代码如下:
业务逻辑类:
/*****************************************************************
 *
 函数描述:
 *       
 飞行计划
 *
 *
 ******************************************************************/

- (
void) getFlightPlaneByDate
{
    [
self.searchBar setText:self.searchText];
   
 NSString *date = [self.searchText stringByReplacingOccurrencesOfString:@"-" withString:@""];
   
 GASSFlightPlanParse *parse = [[GASSFlightPlanParse alloc] initWithObject:self withDate:date];

    [[
NSNotificationCenter defaultCenter] addObserver:self
                                            
 selector:@selector(reloadPlanData:)
                                                
 name:KGetFlightPlanDataFromServer
                                              
 object:parse];
   [
UIApplication sharedApplication]. networkActivityIndicatorVisible =  YES;
}
- (
void) reloadPlanData:(NSNotification *) notification
{
    [
self performSelectorOnMainThread:@selector(reloadFlightPlanData:)
                          
 withObject:notification
                       
 waitUntilDone:YES];
}
- (
void) reloadFlightPlanData:(NSNotification *) notification
{
   
 GASSFlightPlanParse *parse = (GASSFlightPlanParse *)[notification  object];
   
   
 if ([parse.flightPlanObjects count] == 0)
    {
        [
self alterMessage:@"暂无飞行计划信息,请稍后刷新!"];
       
 return;
    }
   
 if (self.flightPlanObjectsArray!= nil)
    {
        [
self.flightPlanObjectsArray removeAllObjects];
       
 self.flightPlanObjectsArray = nil;
    }
    [
self.flightPlanObjectsArray addObjectsFromArray:parse.flightPlanObjects];
    parse =
 nil;
   
    [[
NSNotificationCenter defaultCenter] removeObserver:self name:KGetFlightPlanDataFromServer object:parse];
   
   
 self.selectedIndexPath = -1;
    [
self.myTableView reloadData
];
}

工具类:
-(void) parseFlightPlanModels
{
    //Do something…………
    //.…………
    //.….
    [[
NSNotificationCenter defaultCenter] postNotificationName:KGetFlightPlanDataFromServer
                                                       
 object:self];
}

4.工具类保存业务逻辑类的指针
在工具类进行初始化时,保存业务逻辑类的对象的指针,但相应操作完成后调用业务逻辑类的相关方法。
- (id)  initWithObject:(GASSMasterViewController*)controller withDate:(NSString *) date;

总结:
1.以上四种方法是IOS开发过程中经常用到的异步函数实现回调的方法,其中前三种是推荐使用的,第四种代码的耦合性太高,最好不用。
2.通过比较这前三种的实现代码可以发现,代码块的方式比较简洁,NotificationCenter的方式比较好理解简单易容,协议+代理的方式
  适合用于比较负责的业务逻辑。
3.在使用以上的代码模式类构建应用的时候一定要注意的问题是,工具类尤其是连网操作往往会在非UI线程中去执行,而当这样的操作执行
  完毕后往往会执行一些与UI相关的操作,所以一定要确保这些操作要在主线程去执行,否则会出现一些意想不到的错误。
4.当代码块被引入IOS后,苹果官方文档鼓励使用代码块来实现异步操作,这样比使用代理的效率更高。



        
C++ SDK提供回调函数接口给Android/iOS 集成 C++如何提供跨平台的回调函数接口是业务开发很常遇到的需求,但是实际上公开的资料都很杂乱,而且不一定正确,因此在此文章中,以Android Java和iOS Swift为例,系统化说明一下如何制作一个跨平台C++回调函数接口。 阅读详情

相关推荐

[iOS]Objective-C利用协议实现回调函数(类似java的回调函数)

NULL 博文链接:https://z251257144.iteye.com/blog/1331507

iOS中的回调(callback)和logos回调hook

/ 声明、赋值一起//修改callback 返回值//调用原back//页面加载完毕%end——摘自《Object-C Programming:The Big Nerd Ranch Guide 2nd》P613解读如下:callback(回调)就是一段「代码」,我们会通过某种途径,将这段「代码」和一个特定的事件(event)联系起来,当特定事件(event)发生后,这段「代码」被执行。很好,简单粗暴。

六桥风月IT随笔 1724

iOS 四种回调方法总结

主要介绍了iOS 四种回调方法总结的相关资料,需要的朋友可以参考下

iOS笔记-----关于回调函数——Delegate的那些事

iOS笔记也终于迈入两位数之列。在此里程碑下。明显要拿出点诚意来好好写一写。所以,我决定写一下早已改写的delegate。 什么是回调函数 我们先不管delegate,我们先来说说回调函数(callback).wiki的解释在这里。 回调函数,或简称回调,是指通过函数参数传递到其它代码的,某一块可执行代码的引用。 好我来说所自己理解过后的解释: 如果不用回调函数可不可以写程序。(

仰望星空 3943

海康威视摄像头CVE-2017-7921漏洞复现:从零到一的实战指南(含解密工具下载)

本文详细解析了海康威视摄像头CVE-2017-7921漏洞的技术原理与复现方法,提供从环境搭建到实战利用的完整指南。通过认证绕过漏洞,攻击者可获取敏感信息并执行高权限操作,文章还包含解密工具下载与防御建议,助力安全研究人员深入理解物联网设备安全风险。

weixin_29325515的博客 813

Wan 3.0提示词实战:从抄作业到改作业的完整技巧

AI视频生成中,提示词是决定成片质量的核心。视频模型依赖于文字约束来定义运动轨迹、镜头语言与物理合理性,提示词工程因此成为连接创意与技术的关键。本文从提示词的结构、资源获取、优化方法入手,结合Wan 3.0的模型特点,梳理了从官方模板到社区案例的实战路径,并强调运动一致性、风格词堆砌等常见问题。通过分解主体、动作、镜头等维度,帮助创作者快速找到适配的提示词,提升视频生成的稳定性与惊喜感。

weixin_29483277的博客 351

IOS的OC项目下回调函数的定义以及传参

IOS的OC项目下回调函数的定义以及传参 1.首先定义一个类方法,通过类名打点调,没有返回值的, +(void) 2。 起个函数名字 +(void)headLineWithSuccess , headLine是你项目对于模型名字, 3 block定义,重点 +(void)headLineWithSuccess:(void()()) 先把格式写好 +(void)headLineWithSuccess:(void()())解释一下 第一小括弧写 ^ block关键符号,第二小括弧写回调时候具体的返回值类型,我这

A1521315qwss的博客 1354

Unity3D用c#脚本调用前端javascript函数:H5获取unity - webgl 加载并初始化完成的消息

unity3d发布的Webgl 可以作为静态文件加载到H5页面中,并通过javascript 调用unity内置的C#脚本函数,详见Webgl调用unity api。而往往我们需要知道Webgl ready的消息,本文将给出unity 内部调用javascript函数的方案加以解决。

Bravo 2476

iOS 回调方法使用总结

在iOS OC编程中,很多场景都会使用回调,尤其和C、C++代码的数据交互上,使用回调,会很方便。那么在OC中都可以使用那些回调方法呢?总结了以下6种: 一、Block方式 Block是OBJC提供的一种运行时方法机制,由c函数实现,它提供了一种运行时的临时回调机制。 Block对象的声明: 声明一个参数为int,返回值为int,带2个int参数的Block对象block。 int (^block)(int,int); 通过typedef简化: typedef int...

程序猿老樊的博客 1725

deepin启动异常处理

修复的命令在执行时会输出大量的修复信息,正常情况下修复完之后输入exit命令回车后,即可正常启动系统。

whxxiang的博客 4370

IEEE Transaction期刊模板使用注意事项

本文将总结使用IEEE Transactions系列期刊的投稿模板时的一些注意事项,包括模板本身的使用规范、参考文献的正确格式等其他内容。

weixin_39529207的博客 2万+

iOS下ajax回调函数里不能播放audio

iOS下audio必须监测到事件才可播放, ajax回调函数里不能播放 解决办法 在点击方法里先播放然后立即暂停,在回调函数里重新播放 onclick(function(){ $("#_wxAudioWin")[0].play();$("#_wxAudioWin")[0].pause(); ajax(function(){ $("#_wxAudioWin")[0].play...

272

vscode中运行gcc -v命令失败了,提示:gcc不是内部或外部命令...如何解决?

🏆本文收录于 《全栈Bug调优(实战版)》 专栏,该专栏专注于分享我在真实项目开发中遇到的各类疑难Bug及其深层成因,并系统提供高效、可复现的解决思路和实操方案。无论你是刚入行的新手开发者,还是拥有多年项目经验的资深工程师,本专栏都将为你提供一条系统化、高质量的问题排查与优化路径,助力你加速成长,攻克技术壁垒,迈向技术价值最大化与职业发展的更高峰🚀!

**My Coding Family** 976

ios中利用协议实现回调函数功能

最近因为项目中需要实现回调函数功能,所以学习了下在ios中如何实现回调函数的相关知识。我们知道在C/C++中回调函数是通过函数指针来实现的,在ios中我们可以通过协议来实现回调功能,另外还可以通过委托以及通知来实现此功能,下面通过一个Demo来说明具体实现过程。此Demo包括ViewController类和ReceiveData类两个类以及自定义协议RefreshText协议。ViewContro

xuxue1072的专栏 933

基于sklearn实现LDA主题模型(附实战案例)

目录LDA主题模型1.LDA主题模型原理2.LDA主题模型推演过程3.sklearn实现LDA主题模型(实战)3.1数据集介绍3.2导入数据3.3分词处理 3.4文本向量化3.5构建LDA模型3.6LDA模型可视化 3.7困惑度 其实说到LDA能想到的有两个含义,一种是线性判别分析(Linear Discriminant Analysis),一种说的是概率主题模型:隐含狄利克雷分布(Latent Dirichlet Allocation,简称LDA)。 现在讨论的是主题模型

m0_64336780的博客 2万+

Arcgis中的模型构建器(ModelBuilder)技术之批量图层转KML

这段时间全省各地都在开展耕地流出图斑整改恢复工作,期间或多或少都需要村委会协助摸排举证,除了举证软件外,奥维、外业精灵等软件想必大家接触得也很多。这就经常需要我们转kmz文件给业主或者摸排人员,那么有没有什么方法在arcgis下快速批量转kmz文件呢,今天就介绍一下如何在模型构建器(ModelBuilder)构建批量图层转KML的模型。

weixin_44671081的博客 1325

iPhone开发之第三方回调函数的使用方法

回调函数在程序世界里随处可见,iPhone中也不例外,但在iPhone中经常会遇到用常规方法无法回调,上一篇文章可以解决此问题,今天再上一种方法,专门的第三方回调函数。 1、在需要回调的类中定义回调: -(void)DoneAndMessageTo:(NSObject *)cbobject setCallbackFunctionName:(NSString *) selectorname

strliu的专栏 697

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

自定义UIAlertView及简单的回调函数使用说明

最近刚刚接触iOS的的开发,总结一下自己的心得体会.我们做iOS开发的时候,弹出对话框基本上都是使用系统提供的UIAlertView. 但是有时候系统提供的未必能够满足我们的需求,这个时候就需要我们自定义一个自己的UIAlertView,下面我们就来看看怎么样创建. 首先,我们创建一个继承于UIView的类CustomAlertView,接口定义文件如下: #impor

hkp2006的专栏 525

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

IOS回调函数

自定义方式实现回调  具体代码: 1、创建一个工程名CallBackDemo,在ViewController.xib文件加入一个button按钮,ViewController.h代码: 1 #import 2 <a href="http://my.oschina.net/interface" class

leewolf 1011

老版QQ原生表情gif动态

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

iOS开发 dispatch_block_t 简单的实现不带参数的回调函数

通常写一个不带参数的块回调函数是这样写的在 .h 头文件中定义类型 typedef void (^leftBlockAction)(); 再定义一个回调函数 - (void)leftButtonAction:(leftBlockAction)leftBlock; 在 .m 文件中实现 - (void)leftButtonAction:(leftBlockAction)left...

weixin_33861800的博客 318

IOS 5 拦截手机短信(需越狱)

引用 1.手机要越狱,没有越狱的话,下面的可以不用看了!  2.IOS 要5.0以上,4.xx的同上  首先,声明下!由于公司移动开发的项目中,需要根据手机的内容进行逻辑处理,也就是要实现手机短信拦截,由于,本人一直搞的是JAVA,对OC 语言还是比较陌生的,这段辛酸路总算熬出个苗头!由于,公司中没有人搞这个,遂只能网爬了,郁闷的发现,网上的代码几乎不能运行,在朋友的帮助下,成功的对

lin的iOS专栏 1044

对iOS网络请求的容易封装,并且使用block回调函数方式

转自:http://www.myexception.cn/operating-system/1462106.html 对iOS网络请求的简单封装,并且使用block回调函数方式 // 废话不多说直接上代码   //     RequestHttpClass.h文件   /*封装简单的异步请求*/ #import // 相当于定义一

depthlove2011的专栏 1136

【REACT NATIVE 系列教程之十二】REACT NATIVE(JS/ES)与IOS(OBJECT-C)交互通信

本站文章均为 李华明Himi 原创,转载务必在明显处注明: 转载自【黑米GameDev街区】 原文链接: http://www.himigame.com/react-native/2301.html一用到跨平台的引擎必然要有引擎与各平台原生进行交互通信的需要。那么Himi先讲解React Native与iOS之间的通信交互。       本篇主要分为两部分讲解:(关于其中讲解的OC语法等不介绍,不

李华明Himi 6477
上一篇: IOS Block 代码块使用 (一)
下一篇: IOS CoreData 使用 (一)
张哲BJUT
博客等级 码龄15年 151粉丝 111原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值