1.因为父类指针可以指向子类对象,使用 copy 的目的是为了让本对象的属性不受外界影响,使用 copy 无论给我传入是一个可变对象还是不可对象,我本身持有的就是一个不可变的副本。...当我们滚动的时候,也希望不调度,那就应该使用默认模式。但是,如果希望在滚动时,定时器也要回调,那就应该使用common mode。 15. NStimer准吗?谈谈你的看法?...方法: 1、在主线程中进行NSTimer操作,但是将NSTimer实例加到main runloop的特定mode(模式)中。...默认是不启动的,若要启动则需要手动启动; 在一个单独的线程中,如果需要在处理完某个任务后不退出,继续等待接收事件,则需要启用RunLoop; NSRunLoop提供了一个添加NSTimer的方法,可以指定...4). viewDidLoad:视图控制器的view被加载完成。 5). viewWillAppear:视图控制器的view将要显示在window上。
1.通知的观察者,或KVO的观察者 由于通知中心是系统的一个单例,你在注册通知的观察者时,实际上是在通知中心注册的, 这时,即使ARC下系统帮我们释放了对象,但是在通知中心的观察还是没有移除,那么当有...该通知时,依然会尝试调用该对象的接受通知的方法,这可能会导致一些问题. 2.对象强委托 对于其他的对象来把你当做委托 delegate时,并且是 强引用时,即时你自身被释放,但是引用你的对象依然还在...C语言写的一些好内存的类文件, 4.控制器中NSTimer没有被销毁 当viewController中存在NSTimer时,需要特别注意,当调用[NSTimer scheduledTimerWithTimeInterval...A的一些方法,但是UITableViewCell B的方法列表中还是会有 那些方法,只是省去了书写而已,书写在了父类文件中)而且没有被销毁,所以当UITableViewCell A 中的通知A被触发时...,看似达到了要求,其实在 UITableViewCell中注册通知是很不好的方法,这样会造成很多 UITableViewCell 无法被释放,一直在内存中,使用 多层次的Block回调,一样可以达到通知的效果
这种实现机制是一个非常典型的模板方法设计模式,在基类中定义了一个控制器在生命周期内各环节的调用方法,您只需要在派生类中重载这些方法来完成控制器生命周期内各环节所要完成的动作或者处理的事情。...为了实现这些能力,控制器中采用了一种模板方法的设计模式来解决这个问题。这里面我主要想介绍一下iOS视图控制器为解决这些问题而所做的实现。...比如你可以在系统提供的控制器的基础上派生出你自己的控制器基类,然后把这些基类也可以单独的保存到一个文件夹中。 最好不要以每个功能单独建立文件夹来管理。...除了用运算时扩展属性的方法外,还可以将共有的方法和属性单独提炼出来让一个辅助类来实现,然后在派生基类的初始化方法中创建这个辅助类,并且后续的一些方法都委托给辅助类来实现。...上面借助辅助类来实现的方法可以解决我们的派生类中代码重复的问题。上面的方法缺点就是我们的派生类中需要编写很多重复的、程式化的代码。如何来精简呢?
一、MVC模式 MVC是一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑 1.1实例 MVC...例如,模型对象可能是表示游戏中的角色或地址簿中的联系人。用户在视图层中所进行的创建或修改数据的操作,通过控制器对象传达出去,最终会创建或更新模型对象。...模型对象更改时(例如通过网络连接接收到新数据),它通知控制器对象,控制器对象更新相应的视图对象。 1.1.2视图对象 视图对象是应用程序中用户可以看见的对象。...则将该任务存放到协议中,由代理完成.但是代理并不会主动的执行任务,需要委托方通知代理。...kvo,键值对改变通知的观察者,平时基本没用过。 四、单例模式 单例模式可以保证App在程序运行中,一个类只有唯一个实例,从而做到节约内存。 在整个App程序中,这一份资源是共享的。
但是个别的时候,必须在头文件中引入其他类的头文件: 主要有两种情况: 该类继承于某个类,则应该引入父类的头文件。 该类遵从某个协议,则应该引入该协议的头文件。而且最好将协议单独放在一个头文件中。...,在iOS中分为两种: 普通的委托模式:信息从类流向委托者 信息源模式:信息从数据源流向类 ?...普通的委托 | 信息源 就好比tableview告诉它的代理(delegate)“我被点击了”;而它的数据源(data Source)告诉它“你有这些数据”。...最后的话 总的来说这一部分还是比较容易理解的,更多的只是教我们一些编写OC程序的规范,并没有深入讲解技术细节。...而三部曲的最后一篇:技巧篇则着重讲解了一些在编写Objective-C代码的过程中可以使用的一些技巧。
但是个别的时候,必须在头文件中引入其他类的头文件: 主要有两种情况: 该类继承于某个类,则应该引入父类的头文件。 该类遵从某个协议,则应该引入该协议的头文件。而且最好将协议单独放在一个头文件中。...,在iOS中分为两种: 普通的委托模式:信息从类流向委托者 信息源模式:信息从数据源流向类 普通的委托 | 信息源 就好比tableview告诉它的代理(delegate)“我被点击了”;而它的数据源(...第52条: 别忘了NSTimer会保留其目标对象 在使用NSTimer的时候,NSTimer会生成指向其使用者的引用,而其使用者如果也引用了NSTimer,那么就会生成保留环。...最后的话 总的来说这一部分还是比较容易理解的,更多的只是教我们一些编写OC程序的规范,并没有深入讲解技术细节。...而三部曲的最后一篇:技巧篇则着重讲解了一些在编写Objective-C代码的过程中可以使用的一些技巧。 ----
Spring MVC 与许多其他 Web 框架一样,是围绕前端控制器模式( front controller )设计的,其中DispatcherServlet为请求处理提供统一入口,而实际工作由委托组件处理...getServletConfigClasses() 返回的类用来配置 web 应用,比如控制器,视图解析器等。...我的完整代码示例见:https://github.com/vir56k/java_demo/tree/master/spring_mvc_demo_1 2.3 读取请求中的参数 支持下述参数: 查询字符串...控制器通知( controller advise ) 是指 被标注了@ControllerAdvice 注解的类。...标注的方法 在标注了 @ControllerAdvice 的类中,上述的三个方法会运用到整个应用程序所有控制器中带有 @RequestMapping 方法上。
方法名,要触发的方法的方法名。 3.如果在编写程序时,如声明指针时,不知道所指对象的准确类型,为此可以使用id类型。...4.在obj-c中,创见对象最常见的途径就是使用alloc和init,通常会将这两个消息写在一行代码中,并以嵌套的形式连续发送(Apple推荐写法): [[NSDate alloc] init];...14.在Apple提供的类中,有些覆盖了isEqual:方法。对于这些类,相等的(equal)和相同的(identical)是两个概念。...如果某个新对象的对象是另一个对象的委托对象或数据源对象,那么该对象应该在其dealloc方法中取消相应的关联: (void)dealloc { [windowThatBossesMeAround setDelegate...26.c语言辅助函数,由于不属于函数内任何一部分,故应该在.h中位于@interfce之前,在.m中应该位于import之后,@implement之前插入函数详细实现逻辑。
再看一个NSTimer对象的代码: // 一个自定义类对象 Logger *logger = [[Logger alloc] init]; // 为NSTimer对象添加回调——Target-action...如果有这个疑问,可以移步到我在知乎回答的问题:如何用简单明了的话解释一下什么是 Objective-C 中的委托?或许可以解答你的部分疑问。...(不过我还没有自己实现过~) 3、Notifications/通告 Notification也可以翻译成「通知」,但是为了不和iOS中的「本地通知」、「远程通知」这类「通知」混淆,这里将Notification...;然后通告中心会转发通告出去;这时候在监测该通告的ViewController类收到通告后,就会执行相应的代码(回调)」。...它其实就是大括号括起来的一段代码,只是语法有点「怪异」而已,而且可以作为方法中的参数进行传递。(在Swift中,与之对应的貌似是「闭包(Closures)」)。
我只是想说说我们究竟应该如何理解 M-V-VM,当我们真正开始写代码时,应该在里面的每一层里写些什么。 ---- MVVM,当然三层——M-V-VM。...于是那么多的代码写到哪里呢? 答案:MVVM 之外。 ---- 我们的代码不止 MVVM 三层 MVVM 不是应用程序架构,只是一个 GUI 类程序的开发模式而已。...MVVM 只是数据驱动型 GUI 程序建议的开发模式;无论是三层中的哪一层,本质上都是在解决 UI 问题。 而非 UI 问题根本就不在 MVVM 的讨论之列。...不知看到这里时你会不会喷我一脸——“V”解决 UI 问题也就算了,“VM”和“M”算什么 UI! VM,视图模型。其本质是模型。什么的模型?“视图”的模型。这是为真实的 UI 做的一层抽象模型。...MVVM 模式按此理解后,我们将更能够将代码放到合适的位置,避免 VM 代码的膨胀: 公共的控件或者辅助代码应该抽出来放到别处,比如形成公共组件 一些非 UI 的业务功能单独做,独立于 MVVM 模式,
但总的实现原理非常类似 通过这种方式加载视图,需要调用UIViewController类的initWithNibName:bundle:方法 通过loadview方法加载: 这就是通过代码加载...这需要我们在loadView 方法中,通过编程创建自己的视图层次,并且把把根视图赋值给UIViewController的view属性。...此时整个视图层次(view hierarchy)已经被放到内存中。 无论是从nib文件加载,还是通过纯代码编写界面,viewDidLoad方法都会执行。...当挂起时,程序还是停留在内存中的,当系统内存低时,系统就把挂起的程序清除掉,为前台程序提供更多的内存。...App中,UIWindow是最顶层的界面内容,我们使用UIWindow和UIView来呈现界面。
如果不行,则把协议单独放在一个头文件中,然后将其引入; 有时候在编写头文件时,需要引入某个类A(如作为当前类的某个属性来使用),但是不需要知道这个类A的实现细节,此时我们不需要直接引入这个类A的头文件...Copying,否则应该自己去编写深拷贝的; 4 协议与分类 4.1 通过委托与数据源协议进行对象通信 委托模式为对象提供了一套接口,使其可由此将相关事件告知其他对象; 将委托对象应该支持的接口定义成协议...,在协议中把可能需要处理的事件定义成方法; 当某对象需要从另外一个对象中获取数据时,可以使用委托协议。...,每个协议方法对应于该属性的一个二进制位;需要注意的是 委托对象与被委托的对象之间的关系应该是非拥有关系,也就是对应的属性得用 weak来修饰; 4.2 将类的实现代码分散到便于管理的数个分类之中 使用分类机制把类的实现代码划分成易于管理的小块...调用者可以等待这组任务执行完毕,也可以在提供回调函数之后继续往下执行,这组任务完成时,调用者会得到通知; 6.9 使用 diapatch_once 来执行只需要运行一次的线程安全代码 经常需要编写“只需执行一次的线程安全代码
不同代码的构建时机 控制器类是一个功能的调度总控室,而且他还通过模板方法的设计模式提供给了我们在控制器的生命周期内各阶段事件发生时的处理回调。...更有甚者因为在懒加载中实现过多的代码导致在某些地方访问属性时产生了崩溃。 因此不建议对一个控制器里面的所有视图构建都采用懒加载模式,视图的构建和布局应该在loadView中进行统一处理。...采用分类扩展的方法 顾名思义,采用分类扩展的方法就是为视图控制器专门建立一个视图构建和布局的分类扩展。为了将这部分代码和控制器中其他代码分离,我们可以将视图构建的分类扩展代码单独放到新文件中来实现。...因为关于视图构建和布局部分的代码都拆分到其他单独的地方,而我们的控制器的主要实现部分就可以专心编写控制逻辑了。...如果我们想完全实践MVC中的V独立存在并且可以被复用的话,我们可以将视图构建和布局单独抽象到一个视图类中,并且通过接口定义和消息转发的方法来建立控制器和视图之间的联系。
答案: 设计模式是一种编码经验,就是用比较成熟的逻辑去处理某一种类型的事情。 1). MVC模式:Model View Control,把模型 视图 控制器 层进行解耦合编写。 2)....MVVM模式:Model View ViewModel 把模型 视图 业务逻辑 层进行解耦和编写。 3). 单例模式:通过static关键词,声明全局变量。在整个进程运行期间只会被赋值一次。 4)....观察者模式:KVO是典型的观察者模式,观察某个属性的状态,状态发生变化时通知观察者。 5). 委托模式:代理+协议的组合。实现1对1的反向传值操作。 6)....扩展: 在软件工程中,(引自维基百科)设计模式(design pattern)是对软件设计中普遍存在(反复出现)的各种问题,所提出的解决方案。...设计模式能使不稳定依赖于相对稳定、具体依赖于相对抽象,避免会引起麻烦的紧耦合,以增强软件设计面对并适应变化的能力。 使用设计模式的目的 为了代码可重用性、让代码更容易被他人理解、保证代码可靠性。
当一个视图控制器被释放时,它内部的全局指针会被指向nil。用法“:不管全局变量还是局部变量用_strong描述就行。 局部变量:出了作用域,指针会被置为nil。...它的特点是可以被任何类使用(实现),但它并不是类(这里我们需要注意),自身不会实现这样方法, 而是又其他人来实现协议经常用来实现委托对象(委托设计模式)。...代理的作用 代理又叫委托,是一种设计模式,代理是对象与对象之间的通信交互,代理解除了对象之间的耦合性。 改变或传递控制链。允许一个类在某些特定时刻通知到其他类,而不需要获取到那些类的指针。...使用NSTimer写出一个使用block显示(在UILabel上)秒表的代码 代码紧凑,传值、回调都很方便,省去了写代理的很多代码。...示例图2 单例模式理解与使用 单例模式是一种常用设计模式,单例模式是一个类在系统中只有一个实例对象。
本篇包括8-14章的内容,其中14章的内容我拆成了很多个小点,正好两篇完结这本书的笔记。因为书的后半部分信息量要密集很多,尽管字数不多,这篇内容还是比较难的,耐心看吧。...在本篇的最后我把书结尾的连线题写为了容易阅读的表格作为最终的总结。...用户与视图交互,视图通知控制器 控制器与模型交互,控制器也可能会要求视图做出改变(按钮是否按下) 视图回想模型询问状态,模型发生改变时也会通知视图;有些设计中模型的改变也会通知控制器 不要把控制器和视图混在一起...,因为这样视图就有了两个责任,造成了紧耦合,难以扩展和改变 模型常常使用观察者模式,控制器用策略模式,视图用组合模式 适配器模式可把新的模型适应到旧的控制器和视图上,或者反之 ?...13 在真实世界中实践模式 设计模式是某情景Context(不断出现的拥有一定重复共性的需要应用模式解决的情况)下,针对某问题(情景下的约束和目标)采取的某种解决方案(所追求的一个解决问题的通用方案
从图1-1我们还看到,在标准的MVC中模型能主动推数据给视图进行更新(观察者设计模式,在模型上注册视图,当模型更新时自动更新视图),但在Web开发中模型是无法主动推给视图(无法主动更新用户界面),因为在...概念差不多了,我们接下来了解下Web端开发的发展历程,和使用代码来演示一下Web MVC是如何实现的,还有为什么要使用MVC这个模式呢?...图1-4 1.4.1、CGI:(Common Gateway Interface)公共网关接口,一种在web服务端使用的脚本技术,使用C或Perl语言编写,用于接收web用户请求并处理,最后动态产生响应给用户...本质就是在html代码中嵌入java代码。JSP最终还是会被编译为Servlet,只不过比纯Servlet开发页面更简单、方便。但表现逻辑、控制逻辑、业务逻辑调用还是混杂。如图1-6 ?...Page Controller(Command):页面控制器/动作/处理器:功能处理代码,收集参数、封装参数到模型,转调业务对象处理模型,返回逻辑视图名交给前端控制器(和具体的视图技术解耦),由前端控制器委托给应用控制器选择具体的视图来展示
当一个视图控制器被释放时,它内部的全局指针会被指向nil。用法“:不管全局变量还是局部变量用_strong描述就行。 局部变量:出了作用域,指针会被置为nil。...它的特点是可以被任何类使用(实现),但它并不是类(这里我们需要注意),自身不会实现这样方法, 而是又其他人来实现协议经常用来实现委托对象(委托设计模式)。...代理的作用 代理又叫委托,是一种设计模式,代理是对象与对象之间的通信交互,代理解除了对象之间的耦合性。 改变或传递控制链。允许一个类在某些特定时刻通知到其他类,而不需要获取到那些类的指针。...使用NSTimer写出一个使用block显示(在UILabel上)秒表的代码 代码紧凑,传值、回调都很方便,省去了写代理的很多代码。...如下图: 单例模式理解与使用 单例模式是一种常用设计模式,单例模式是一个类在系统中只有一个实例对象。
不过既然苹果专门提供了这么一个类,就一定是有他的存在意义的。他的优势就在于他的执行频率是根据设备屏幕的刷新频率来计算的。换句话讲,他也是时间间隔最准确的定时器。 还是在使用中介绍吧。...userInfo,用户参数,在初始化的时候传入的用户参数。 说到这里其实NSTimer也就基本介绍完成了,不过老司机还是想着重讲一下NSTimer。...fire只是单独触发了一次事件,并不影响原timer的节奏。 fire 如上图,默认情况且,根据我写的代码,timerB是不会执行的,应为当前mode并不正确(后面会说)。...关于invalid方法 我们知道NSTimer使用的时候如果不注意的话,是会造成内存泄漏的。原因是我们生成实例的时候,会对控制器retain一下。...mode的集合,将输入源加入此模式意味着在Common Modes中包含的所有模式下都可以处理。
Spring Framework提供了一个模型-视图-控制器(MVC)模式框架,它可以简化创建交互式Web应用程序的过程。...在Java EE Web应用程序中,Spring将使用派发器Servlet处理Web请求,该Servlet将把进入的申请委托给合适的控制器,并按需要对请求和响应实体进行转换。...@RequestMapping注解将把请求被映射到的方法缩小到特定的方法上。可以只在控制器方法中添加@RequestMapping,或者同时在控制器类和它的方法中添加。...使用服务和仓库支持控制器 模型-视图-控制器模式 第一步:视图发送命令到控制器 第二步:控制器从模型中读取或操作数据 第三步:模型将数据发送到控制器 第四步:控制器将模型发送到视图 用户界面逻辑是所有只用于支持特定用户界面的逻辑...如果希望指定应该在方法执行时应用的验证组,可以在类上使用@javax.validation.GroupSequence和@ValidateOnExecution。
领取专属 10元无门槛券
手把手带您无忧上云