1.概念Swift 中的闭包是自包含的代码块,可以在代码中传递和使用。它们可以捕获和存储其上下文中的任何常量和变量引用。2.表达式语法闭包的完整形式为:{ (parameters) -> returnType in statements }这里,参数列表和返回类型可选。例如,一个没有参数和返回值的简单闭包示例:let greet = { print("Hello, world
1.概念可选项,也叫可选类型,允许将值设置为nil2.用法在类型名称后面加个问号 ?来定义可选项。ex:var name: String? = "xxxx" name = nil var age: Int? //初始值是 nil var age: Int? = nil //这两种完全等价3.可选值绑定用枚举的模式匹配处理可选类型是有些复杂,可选类型作为Swift的一大亮点,系统当然提供了更加便利
1、新增的对象和方法MapSet2、函数(1)参数默认值function add(a=1,b=2) { return a+b; } add() // 3 add(2) // 4 add(3,4) //7(2)不定参不定参:功能和使用arguments差不多(3)箭头函数注意:箭头内部没有arguments,也没有prototype属性3、类class 作为对象的模板被引入ES6,你可以通过 cl
1.监测机制的改变3.0 将带来基于代理 Proxy 的 observer 实现,提供全语言覆盖的反应性跟踪。这消除了 Vue 2 当中基于 Object.defineProperty 的实现所存在的很多限制:只能监测属性,不能监测对象检测属性的添加和删除;检测数组索引和长度的变更;支持 Map、Set、WeakMap 和 WeakSet。新的 observer 还提供了以下特性:用于创建 obs
1.概念:Vue 数据双向绑定主要是指:数据变化更新视图,视图变化更新数据.2.实现原理Vue 实现数据双向绑定的核心是 Object.defineProperty() 方法。Vue 在初始化数据对象时,会遍历 data 选项中的所有属性,并使用 Object.defineProperty() 为这些属性定义 getter 和 setter。当数据属性被访问
首先解释下什么是路由守卫?路由守卫是Vue Router提供的一种机制,用于在导航过程中对路由进行操作和管理,通过路由守卫你可以在路由跳转前、路由跳转后、或者跳转失败的过程中去处理相应的逻辑。vue中的路由守卫有三种:全局守卫、私有守卫、组件内守卫,今天大概说下这三种路由守卫。1.全局守卫全局前置守卫全局前置守卫会在路由跳转前被调用,可以使用router.beforeEach注册。 const r
在 new Vue() 中,data 是可以作为一个对象进行操作的,然而在 component 中,data 只能以函数的形式存在,不能直接将对象赋值给它,这并非是 Vue 自身如此设计,而是跟 JavaScript 特性相关,我们来回顾下 JavaScript 的原型链:var Component = function() {}; Component.prototype.data = { me
先总结一下就是new操作符的原理是通过创建一个空对象、将this关键字指向新对象、执行构造函数代码和返回新对象的方式来创建对象实例。一、基本概念:new操作符是JavaScript中用于创建对象实例的一种操作符。通过使用new操作符,我们可以调用一个函数,并将其作为构造函数来创建一个新的对象实例。二、new操作符的工作原理:创建一个空的简单JavaScript对象(即{})。链接该对象(即设置该对
1.闭包的概念就是在一个函数里边再定义一个函数,这个内部函数一直保持有对外部函数中作用域的访问。函数执行,形成一个独立作用域,保护里边的私有变量不受外界的干扰,除了保护私有变量外,还可以存储一些内容,这样的模式叫做闭包。2.闭包的作用作用是通过一系方法,将函数内部的变量(局部变量)转化为全局变量。能够实现封装和缓存。总结就是两个作用:闭可以读取函数内部的变量,是让这些变量的值始终保持在内存中。 代
1.概念变量声明提升变量声明提升是只当栈内存作用域形成时,js代码执行之前,浏览器会先把带有var和function关键字的变量提前声明,这种预先处理的机制就叫做变量提升机制也叫预定义。函数声明提升函数声明提升与变量声明提升的本质上基本一致,但函数声明提升,也会在堆内存开辟一个空间,他的值是函数体的字符串。所以在预编译阶段,将函数提升到顶部声明,并将默认值赋值为一个引用,引用的值是堆内存的函数体字
1.尽量使用懒加载主要是路由懒加载、组件懒加载、图片懒加载。路由懒加载:首屏进入时直接加载和首屏相关路由,其他路由实现懒加载,即打开该路由时再去加载。组件懒加载:const One = ()=>import("./one");图片懒加载:使用vue-lazyload插件。2.尽量不生成map文件在vue.config.js配置:module.exports = { productio
含义及作用:nextTick是一个微任务,nextTick中的回调是在下次Dom更新循环结束之后执行的延迟回调,可以用于获取更新后的Dom,总结一句就是在DOM进行下一次更新的时候调用的函数。为什么会使用nextTick:vue有一个异步策略,也就是说为什么vue它是异步渲染的?因为每次数据更新或者变化的时候都要去更新和渲染DOM这样会导致vue的性能问题,所以vue有一个异步渲染的策略,就是每次
什么是diff算法?diff算法是一种用于比较虚拟DOM树之间差异的高效算法。就是进行虚拟节点对比,并返回一个patch对象,用来存储两个节点不同的地方,最后用patch记录的消息去局部更新DOM。diff算法的作用?它是Vue的核心特性之一,允许Vue以一种有效的方式更新DOM以反映数据的最新状态。Vue的diff算法采用深度优先的递归方式比较两棵虚拟DOM树的差异。它会尽可能地复用老的虚拟节点
今天我们来说下我们构建一个完整的vue的项目需要哪些步骤?构建项目vue3项目中我们就用create-vue命令或者vite去生成一个新的项目。引入插件接下来就是引入必要的插件比如:路由:vue-router,网络请求:axios,存储:vuex/pinia,UI库:elementUI/vant/element-plus等。常用库和组件常用库和组件有像lodash、dayjs、nprogress等
上节说到了vue中的数据响应的方式,这篇说下这两个的具体理解和区别。首先vue3中已经放弃了defineProperty,使用了proxy来代替,那么肯定是defineProperty有不足之处。那么先说下defineProperty的不足之处在哪里?首先:Object.defineProperty 有一个缺陷是无法监听数组下标的变化,导致直接通过数组的下标给数组设置值,不能实时响应。一旦我们修改
什么是响应式?数据响应式就是 能够监测到数据变化并且做出响应的一种机制为什么vue需要响应式?在 vue 中要解决的一个核心问题就是连接数据层和视图层,通过数据变化驱动视图更新,要做到这点就需要对数据做响应式处理。有什么好处?通过数据响应式加上虚拟 DOM 和 patch 算法,我们只需要操作数据,关心业务,完全不需要接触繁琐的 
大家都知道vue中的双向绑定用的是v-model来实现的,它会根据表单元素的类型自动选择正确的方法来更新数据。那么具体实现的原理是什么呢?下面先用语言去解释一下。 Vue 中双向绑定的原理其实就是利用:value把变量挂载到dom上,然后通过input事件去监听元素的变化,从而实现动态绑定的原理,看看使用代码:<template> <div> <
iOS的内存管理其实涉及到的东西特别多,这里我们不去详细的阐述细节的东西,大概说一下内存中的野指针、空指针、自动释放池、property内存管理的关键字这几个方面。1.野指针、空指针野指针就是指向了一个被销毁的对象的指针,如果给野指针发送消息,会报EXC_BAD_ACCESS错误。如何避免野指针的出现?就是在对象被销毁之后,将其置为nil。空指针就是没有存储任何内存地址的指针,也就是NULL或者n
上一篇说了四个iOS中常用到的存储类型,分别是NSUserDefault、归档(NSKeyedArchiver)、KeyChain、Plist存储。这篇我们主要说下SQLite3和CoreData.1.SQLite3SQLite3是一个轻量级的能够跨各端的数据库,它能够存储大量的数据以及存储的速度非常快,并且能够对数据进行大量的聚合,操作也使非常快的。但是它的写起来也非常繁琐,用到的都是C语言的结
最近做项目过程中用到了iOS的本地存储,今天大概简述一下iOS中经常遇到的本地存储,大概可分为几个:NSUserDefaults (开发中用到的最多的)归档Keychainplist存储SQLite3CoreData下面大概介绍下这几个:1.NSUserDefaultsNSUserDefaults适合存储轻量级的本地数据,支持的数据类型有:NSNumber,NSString,NSDate,NSAr
1.什么是RunLoopRunLoop是通过苹果系统内部维护的事件循环(Event Loop)来对事件/消息进行管理的一个对象。没有消息处理时,休眠已避免资源占用,由用户态切换到内核态。有消息需要处理时,立刻被唤醒,由内核态切换到用户态。2.RunLoop的数据结构NSRunLoop(Foundation)是CFRunLoop(CoreFoundation)的封装,提供了面向对象的API RunL
作为一名多年的iOS开发者,说实话iOS中用到的锁确实不常用,但是也很有用,今天我们来总结一下常用的锁。1.NSLockNSLock属于互斥锁,一般只是用于简单的逻辑中,不能多次使用lock,不然会造成死锁。示例代码://创建锁 _myLock = [[NSLock alloc] init]; [self testLock]; -(void)testLock { //上锁 [_my
1.@property首先我们要只知道当你写下@property的时候,内部做了什么操作?举个例子:@property NSObject *obj;这个时候编译器做了三件事:1.创建了实例变量obj;2.声明了obj属性的setter和getter方法;3.实现了obj属性的setter和getter方法。其次,就是@property的本质是什么?其实就是一句话,使用@property系统化会自动
今天我们来说下http和https的安全性,众所周知http是不安全的,它可以被中间人攻击篡改我们发送的和获取到的内容,那么https就可以防止中间人攻击,是安全的,那么就要说说他们两个的区别了。首先,HTTP是协议中的报文都是以明文的方式进行传输的,不做任何加密,这样就有一个角色登场了,那就是中间人。我举个例子,比如说A正在给服务器发送一个消息aaa,那么在传输协议的过程中aaa可能会被截获,然
1.MVC:Model-View-ControllerMVC是通过controller的控制去操作model层的数据,并且返回给view层展示。MVC工作原理:用户触发事件 -- view层发送指令到controller层 -- controller通知model层更新数据 -- 数据更新完显示在view层上。优点:通过controller控制全局,同时将view和model的变化分开,对复杂混乱
今天简单来说下runtime的具体应用场景有哪些?1.给分类添加属性正常来说分类是不能添加属性的,但是利用runtime的机制就可以实现这个功能,主要是通过关联对象的方式实现,代码如下:// .h代码 #import <Foundation/Foundation.h> @interface NSObject (Name) @property (nonatomic,copy)NSSt
1.tableview的卡顿优化:避免cell的重新布局以及利用cell的重用机制,cell的布局是比较耗时的,尤其是UI比较复杂的或者带图片这些。一般创建好的时候就布局好,如果有需要那么可以把cell放在单独的类中,创建的时候就布局好提前计算好cell的高度不要在cell上使用阴影圆角等layer的操作,很耗时的。cell上的图片采用异步加载的方式显示。尽量不使用addsubview这些添加视图
CAAnimation也称为核心动画是所有动画对象的父类,实现CAMediaTiming协议,负责控制动画的时间、速度和时间曲线等等,是一个抽象类。它是不能直接使用的,能直接使用的类有:1.CABasicAnimationCABasicAnimation可以设定keyPath的起点,终点的值,动画会沿着设定点进行移动,CABasicAnimation可以看成是只有两个关键点的特殊的CAKeyFra
说到性能优化是个老生常谈的问题了,那么我总结一些我自己的经验的方法。1.列表的优化。一般列表是比较消耗性能的,尤其是带图片的列表,那么就先说下列表上的图片如何优化;1.图片优化正常来说就是懒加载图片或者预加载图片,可以使用第三方的一些插件,比如自定义 v-lazy 指令 (参考项目:vue-lazyload)。2.列表for循环的时候最好指定唯一key,这有助于Vue高效地识别
1.为什么会引起循环引用?由于NSTimer会引用控制器self,而self又持有NSTimer对象,所以形成循环引用,在dealloc中停止定时器是不会被执行的,Timer也永远不会被释放,这样也造成了内存泄漏。2.如何解决? 1.先说第一个比较麻烦的解决方法:在viewwillappear方法中开启定时器,再在viewwilldisappear里面去关闭定时器。-(void)view
Copyright © 2005-2024 51CTO.COM 版权所有 京ICP证060544号