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

Blender学习笔记——制作向量场

#下载Blender - UE4 - FGA Vector Field Editor插件的压缩包,Github上的下载地址如下:https://github.com/isathar/Blender_UE4_VectorFieldEditor #下载并解压后将FGA VectorFields文件夹复制到C:\Program Files\Blender Foundation\Blender 2.83\2.83\scripts\addons目录下,此步骤可根据blender安装的位置自行调整,只要放入addon

wychao2020的博客 1725

ArcGIS供地图斑图形及属性入库操作(附练习数据)

已知数据: 供地图斑位置图。 供地图斑表格 成果要求:将供地图斑导入mdb数据库并将供地图斑表格的属性进行挂接。 接下来我们开始操作: 1、 打开arcmap,在目录内连接的文件夹内找到供地图斑位置图。图片 2、 将annotation和polygon添加到arcmap图片 3、 右击文件所在文件夹新建mdb数据库图片 4、 右击数据库新建要素数据集。(要素数据集非常重要,稍后所有操作都在数据集内进行)选择图斑投影方式及代号。图片 5、 右击要素数据集—导入(将图层内的数据导入数据库)图片 6、 数据导入.

qq_43173805的博客 8132

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

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

A1521315qwss的博客 1354

TMS320C6678开发笔记1-6---C6678单核烧写程序

第6节 单核烧写加载程序 6.1节 TI参考文档 参考文档:《KeystoneI Bootloader Resources and FAQ》讲的非常好,建议一定要看 https://processors.wiki.ti.com/index.php/KeystoneI_Bootloader_Resources_and_FAQ#Direct_Boot_Examples_.28without_IBL.29 里面有三个工程: C6678 EVM SPI boot example C6657 EVM ..

kunkliu的博客 5695

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

国产麒麟系统下Kettle安装避坑指南:解决aarch64架构不兼容问题

本文针对在国产麒麟系统上安装Kettle时遇到的aarch64架构不兼容问题,提供了详细的解决方案。通过剖析错误根源,指导用户获取并放置正确的SWT库文件,并修改启动脚本,成功解决“平台不支持”的报错,确保ETL工具在ARM架构的国产化环境中顺利运行。

weixin_29214691的博客 277

android11-修改屏幕显示方向和触摸方向

参数0表示12点钟方向显示参数90表示3点钟方向显示参数180表示6点钟方向显示参数270表示9点钟方向显示。

Paper_Love的博客 2118

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

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

272

DeepSeek-R1 论文阅读 DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning

和。这些模型的核心创新点是通过强化学习(Reinforcement Learning, RL)来提升大型语言模型(LLM)的推理能力,而没有依赖传统的监督微调(Supervised Fine-Tuning, SFT)作为预训练的步骤。是一种通过大规模强化学习直接训练的模型。它在推理能力上表现出色,能够自然地展现出许多强大且有趣的推理行为。但它也有一些问题,比如可读性差和语言混合。这意味着模型在生成文本时,有时会显得不太清晰,或者不一致地使用不同语言。为了解决这些问题并进一步提升推理能力,研究者提出了。

CSPhD-winston的博客 1840

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

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

xuxue1072的专栏 933

全志F1C100S/F1C200S学习笔记(11)——spi-flash 启动全流程适配烧录及踩坑指南

SPI Flash 系统编译 spi-flash 启动适配 分区规划: 分区序号 分区大小 分区作用 地址空间及分区名 mtd0 1MB (0x100000) spl+uboot 0x0000000-0x0100000 : “uboot” mtd1 64KB (0x10000) dtb文件 0x0100000-0x0110000 : “dtb” mtd2 4MB (0x400000) linux内核 0x0110000-0x0510000 : “kernel” mtd3 剩余 (

丨晋丨 1万+

人工蜂群优化算法(ABC)详解:原理、实现与应用

人工蜂群算法(Artificial Bee Colony, ABC)是Karaboga于2005年提出的一种群体智能优化算法,其灵感来源于蜜蜂群体在自然界中高效的采蜜行为。该算法通过模拟雇佣蜂、观察蜂和侦察蜂三种角色的分工协作来寻找最优解。在ABC算法中,每个潜在的解决方案被视为一个“食物源”,其质量由适应度函数评估。雇佣蜂负责在已知优质食物源附近进行局部开采;观察蜂根据雇佣蜂分享的信息,以一定概率选择并跟进优质食物源;侦察蜂则随机探索新区域,防止种群陷入局部最优。

qq_42212808的博客 393

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

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

IOS回调函数

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

leewolf 1011

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

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、付费专栏及课程。

余额充值