首页
学习
活动
专区
圈层
工具
发布

KVO 在 iOS开发中的应用

当然我想起在UNITY3D中,如果检视面板的数值发生改变对应的GameObject发生位移之类的。我曾经实现了一个inspector的编辑器类,值改变直接通知(其实是调用)对应的函数。...在iOS这里 一切发生的那么自然。不需要额外实现 这是iOS的特性之一 名曰:KVO 。 前情提要 上一篇 KVC 讲到需要遵循的几条几本规则在 KVO 中同样适用。...在值改变之前和值改变之后。 0 不带任何参数进去 传递给监听的值在接受函数ofObject:(id)object可以获取到。...有时候我们在某些条件下不希望接受到KVO的通知,需要重写如下方法: NSInteger HP = 10; +(BOOL)automaticallyNotifiesObserversOfStringOnFoo...手动触发KVO也是允许的,下面主要使用到了 willChangeValueForKey / didChangeValueForKey 这两个函数。即使禁止了自动通知也可以直接在get函数中触发。

91510
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    RunLoop在iOS开发中的应用

    概要 RunLoop在iOS开发中的应用范围并没有像runtime 那样广泛,我们通过CFRuntime的源代码可知runloop跟线程的是密不可分的,一个线程一定会创建一个对应的runloop,只是主线程创建就自动...此外,runloop并不是一个简单的do-while,作为OSX/iOS系统中Event Loop表现,runloop需要处理消息事件,在没有消息的时候休眠,有消息事件的时候立刻唤醒。   ...综上所述,从我个人所接触到知识面runloop一是处理子线程运行,二是根据runloop的不同的activities来处理问题。当然希望通过我这块砖头,引出同学们runloop应用的好玉来。...系统会监听主线程中runloop的的进入/休眠、退出的activities 来处理autoreleasepool,也是同学们长讨论的自动释放池在什么时候释放的问题。...image.png 3.3 TableView中实现平滑滚动延迟加载图片 顺带提一下,这个我在开发中没有用到。

    2.4K20

    多线程在iOS开发中的应用

    NSOperationQueue的常见方法、最大并发数、操作依赖、队列的取消\暂停\恢复 一、概念 1、进程:系统中正在运行的一个应用程序 2、线程:1个进程想要执行任务,必须得有线程。...即线程是进程的基本执行单元 1)线程的串行:一个线程中任务的执行是串行的 2)多线程的原理:同一时间,CPU只能处理一条线程。...多线程并发执行,其实就是CPU快速地在多条线程之间调度(如果CPU调度的时间足够快,就造成了多线程并发执行的假象) 二、多线程在iOS开发中的应用 1、什么是主线程:一个iOS程序运行之后,默认会开启一条线程...,称为“主线程”,或者“UI线程” 2、主线程的主要作用: 显示、刷新UI界面 处理UI事件(点击、滚动、拖拽) 2.1 主线程的使用注意事项: 别将比较耗时的操作放到主线程中 一般的解决方案就是将那些耗时的操作放到另外一个线程中去执行...2.2 iOS中多线程的实现方案 公众号:iOS逆向 iOS支持多个层次的多线程编程,层次越高的抽象程度越高,使用也越方便,也是苹果最推荐使用的方法。

    1.9K30

    哈希表及在iOS中的应用

    记录的存储位置=f(关键字) 这里的对应关系f称为哈希函数(散列函数),采用散列技术将记录存储在一块连续的存储空间中,这块连续存储空间称为散列表或哈希表(Hash table)。...解决冲突的常用方法: 1.开放定址法:使用某种探查(亦称探测)技术在散列表中寻找下一个空的散列地址,只要散列表足够大,空的散列地址总能找到。...,向后查找即可 image.png 哈希在OC中的应用 NSDictionary 1.使用 hash表来实现key和value之间的映射和存储 2.字典的key需要遵循NSCopying协议,重写hash...3.NSString类作为key的时候不需要重写,系统已经重写过了,对于值相同的字符串得到的哈希值相同 NSDictionary实现原理 iOS底层原理:NSDictionary原理 runloop kvo...该函数的动作如下: 1、从weak表中获取废弃对象的地址为键值的记录 2、将包含在记录中的所有附有 weak修饰符变量的地址,赋值为nil 3、将weak表中该记录删除 4、从引用计数表中删除废弃对象的地址为键值的记录

    3.1K21

    Runtime在iOS开发中的实际应用

    1 关联对象(AssociatedObject ) Catagory主要为已经存在的类(主要是系统类)扩展新的方法,关联对象是runtime在开发中应用的最广泛,其主要用于为Catagory的对象增加属性...一是苹果审核的严格,各种理由反反复复被打回去欲哭无泪,二是审核周期长,在2017年之前苹果审核的周期一般都在三天,如果是新应用甚至需要一周以上,如果碰上圣诞节苹果放假我们这边是一般都不会提交审核,于是JSPatch...为代表的热修复技术被开发者推崇,通过逆向中国市面上有头有脸的iOS应用,我发现几乎都使用JSPath或者JSPath的变种。...处理用户登录 5.4Crash的防范 OC中容器类在空值nil 和数组越界都会直接导致我们app 的crash 我们一种处理方式是利用Category增加新方法中判断值是否为空或者越界,对于新工程我们使用大家约定使用容器的...6 逆向开发 逆向开发主要集中在iOS越狱方面,逆向开发可以让我们在iOS开发中打开另一扇门,对于大部门开发者来说很少接触这个领域,我也是在工作中才接触到iOS的越狱,逆向开发的基础就是利用Method

    1.5K20

    谈谈iOS中的原生物理引擎——UIDynamic的应用

    谈谈iOS中的原生物理引擎------UIDynamic的应用 UIDynamic是iOS中UIKit框架提供的接口,其用来为UI元素增加符合物理世界运动规则的动画行为。...简单来说,UIDynamic提供的实际上是一个物理引擎,由于它是iOS原生系统支持的(iOS 7以上),因此兼容性和易用性非常好,使用它开发者可以非常方便的创建出物理动画。...本篇文章,我们将讨论UIDynamic的设计架构、使用方法以及做一些简单的物理动画示例,希望可以在应用开发中为你带来一些启发。...假如我们要实现这样一个动画效果: 模拟一个台球游戏,首先在窗口中显示一个矩形区域作为球桌,其中放置一个台球元素,给其一个初始的速度和方向来模拟发球动作,之后台球将按照预设的物理规律在桌面上进行碰撞运动。...// 创建涡流场行为(场中附加的力是沿速度方向的切线) open class func vortexField() -> Self // 噪声场,此场通常与其他场结合使用,用来在纯粹的物理场中增加一些噪声

    68110

    iOS小技能:链式编程在iOS开发中的应用

    1.2 面向对象 万物皆对象 面向对象对比面向过程的优胜之处在于,名词化的概念比动词化的描述,更便于人类理解。 这也是相比函数式编程的主要优点,许多函数是难以命名的,但对象却很容易。...封装是为了更好的重用性、可扩展性,但要综合考虑性能问题,即使新增了判断也会增加性能的消耗,只是不会量级的增加。比如简单工厂和抽象工厂(反射机制)的封装,会增加性能的消耗。...的妙用:结合block和方法的优点实现iOS的链式编程) 文章:https://blog.csdn.net/z929118967/article/details/107835195 从CSDN资源下载完整..., 76)); }]; } return _imgForReason; } see also iOS...CSDN博主「#公众号:iOS逆向」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

    1.4K30

    YashanDB在云原生架构中的应用前景

    YashanDB作为一款面向企业级应用设计的关系型数据库,具备丰富的部署形态和完善的技术体系,为云原生架构提供了坚实的支撑。...本文将详细解析YashanDB的核心技术特性及其在云原生场景中的应用潜力,旨在为数据库管理员、系统架构师和开发人员提供深入的技术洞察和实践指导。...安全体系与合规保障在云原生架构中,数据安全和访问控制尤为重要。YashanDB提供完善的安全模型,包括用户管理、基于角色的访问控制(RBAC)、基于标签的行级访问控制(LBAC),保障权限细粒度管理。...结论随着云计算和容器技术的广泛应用,数据库在云原生环境中的角色愈加重要。...YashanDB在持续创新的技术支持下,具备了良好的适应性和扩展性,将成为企业云原生战略中不可或缺的关键组件。

    16610

    2025年YashanDB在云原生架构中的应用趋势

    随着云计算技术的快速发展,云原生架构已成为企业构建和交付应用系统的主流模式。云原生数据库作为核心组件,承载着数据管理的关键任务。...本文面向云原生应用开发者与架构设计者,系统分析2025年YashanDB在云原生架构中的应用趋势,涵盖系统架构演进、存储优化、事务与并发控制以及高可用设计等核心技术方向。...结合云原生中的弹性存储特性和分布式对象存储,YashanDB切片文件和数据桶机制支持将冷数据存储至云端,实现成本优化和存储扩展的无缝衔接,满足大规模数据在云环境中多级存储的需求。...云原生安全与数据治理能力YashanDB在云原生落地过程中强化了安全管理体系,涵盖基于角色的访问控制(RBAC)、基于标签的行级访问控制(LBAC)、身份认证及多因子验证支持。...云原生应用开发和运维团队应积极提升对YashanDB技术内核、存储优化、事务隔离及自动选主高可用策略的理解,结合具体业务特点科学规划部署与安全策略,充分利用其云原生能力,助力企业业务在云端稳健高效运行。

    22710

    Harbor在云原生联邦学习平台FATE中的应用

    作为云原生应用的必备组件, Harbor 已经在多个开源项目中得到集成和应用,本文介绍 Harbor 在联邦学习开源项目 FATE 及 KubeFATE 中的应用。...为进一步使用云原生技术来管理、运维联邦学习平台,VMware 和微众银行等社区用户开发了KubeFATE 项目,致力于降低联邦学习的使用门槛和运维成本。...在 FATE 版本更新时,用户可以从互联网下载新版本的镜像和 Helm Charts,再将其导入 Harbor 中供内部环境使用。...KubeFATE 项目在公网上维护了一个 Chart 的仓库,该仓库对应 FATE 的不同版本,通过配置 KubeFATE 可在指定的仓库中获取最新的 Chart。...KubeFATE 充分利用了云原生技术的优势,结合了 Harbor 的镜像和 Chart 的管理能力,具有以下优点。 ◎免除构建FATE时需要各种依赖包的烦琐流程。

    71010

    Harbor在云原生联邦学习平台FATE中的应用

    作为云原生应用的必备组件, Harbor 已经在多个开源项目中得到集成和应用,本文介绍 Harbor 在联邦学习开源项目 FATE 及 KubeFATE 中的应用。...在 FATE 版本更新时,用户可以从互联网下载新版本的镜像和 Helm Charts,再将其导入 Harbor 中供内部环境使用。...KubeFATE 项目在公网上维护了一个 Chart 的仓库,该仓库对应 FATE 的不同版本,通过配置 KubeFATE 可在指定的仓库中获取最新的 Chart。...KubeFATE 充分利用了云原生技术的优势,结合了 Harbor 的镜像和 Chart 的管理能力,具有以下优点。 ◎免除构建FATE时需要各种依赖包的烦琐流程。...◎提供离线部署的能力,加速应用部署的速度。 ◎实现跨平台部署FATE集群。 ◎可按需灵活地实现多实例水平扩展。 ◎升级实例的版本并进行多版本的维护。

    82910

    在IPA中重签名iOS应用程序

    当我们在对iOS应用程序执行黑盒安全测试时,我们一般只能从AppStore来访问和获取iOS应用程序。但是在大多数情况下,客户都会给我们提供一个IPA文件。...在黑盒测试过程中,我们无法访问目标应用的源代码,因此通过Xcode将其部署到设备并进行测试,几乎是不可能的。...在这篇文章中,我们将演示如何重新对一个iOS应用程序签名,并生成一个IPA文件,然后将其部署到我们的测试设备上。...获取正确的配置文件 在Xcode的文件导航栏中,选择“Product”,点击目标App。然后检查Xcode Inspector区域(在Xocde界面的右侧面板),找到应用程序Bundle的路径。...在应用程序Bundle中,我们将会看到“embedded.mobileprovision”,然后把配置描述文件拷贝到当前的工作目录中: $ cp PATH_YOU_GOT_FROM_XCODE/embedded.mobileprovision

    3.8K10

    iOS description与debugDescription在调试程序中的应用

    iOS 中打印函数description与debugDescription的应用 一、description和debugDescription是什么         description和debugDescription...是NSObject协议中的声明的两个方法,同时NSObject类也实现了这个方法,如果子类没有重写,则会调用父类的description和debugDescription方法。...我们先来看声明部分的代码: + (NSString *)description; + (NSString *)debugDescription; 这里返回的字符串就是我们打印在控制台显示的信息。...二、NSObject基类中的description方法是如何实现的 我们写如下的测试代码:  NSObject * objc = [[NSObject alloc]init];  NSLog(@"objc...description是我们在程序中打Log会调用的方法,debugDescription则是我们在断点调试时,在控制台使用po命令打印会调用的方法,比如我们重写Test类的这个方法: -(NSString

    1.7K10

    Facebook iOS 应用是如何加速图片显示的?

    你的Facebook的动态消息中充满着一些关于你朋友、家人以及你所爱的人的照片,也许你会想要在手机上也能重温那些场景。我们一直在寻找提升用户体验的方式,包括更优秀和更快的移动端体验。...为了达到这个目标,我们团队仔细研究了如何在 iOS 设备上更好更快得显示照片并最终找到了一种方法,能够让 Facebook for iOS 的数据开销降低10%,同时将照片加载显示的速度提升了15%。...过去图片是如何被处理的 到目前为止, Facebook for iOS 是根据如下步骤加载你动态消息中照片: 1.我们先拿到这个图片的所有链接,然后根据这个链接来下载格式为JPEG的照片数据。...然而,手机端的应用们似乎还没赶上这个潮流。举个例子, iOS 端上还没有渐进式处理图片的支持,所以我们不得不为在 iOS 上的 Facebook 开发新的方式来做到这一点。...在 Facebook 的 iOS 客户端上用渐进式图片 在 Facebook for iOS 中采用渐进式的图片渲染有如下一些好处: 1.数据消耗:PJPEG使得我们可以避免下载小尺寸的图片。

    2.1K10

    Thunk程序的实现原理以及在iOS中的应用(二)

    本文导读:虚拟内存以及虚拟内存的remap机制,以及通过remap机制来实现通过静态指令来构造thunk代码块。 ?Thunk程序的实现原理以及在iOS中的应用 入口处。...也就是说在iOS系统中不支持将某段内存的保护机制先设置为读写以便填充好数据后再设置为可执行的保护机制来实现动态的指令构造(也就是所谓的JIT技术)。...这样的一个应用是解决动态库的共享加载问题,比如UIKit这个框架库在第一个进程运行时被加载到内存中,那么当第二个进程运行时并且需要UIKit库时就不再需要重新从文件加载内存中而是共享已经加载到物理内存的...这种内存映射的支持其实也可以用来实现进程之间的通信处理,当然在iOS系统中是无法实现跨进程的内存映射的,因此目标进程和原进程必须具有相同的port。...静态构造thunk程序 上一篇文章中实现了通过在内存中动态的构造机器指令来实现一段thunk代码,但是这种机制在iOS系统中是无法在发布版证书打包的程序中运行的。

    1.4K20

    解锁环境变量在云原生应用中的各种姿势

    应用程序在某些时刻总是需要一些外挂配置,云原生应用的实践是在容器化之前就将应用程序配置保留在代码之外。...“12-Factors App:Store config in the environment ① 外挂配置文件:业务配置 appsettings.json “ 可以在代码中要求加载appsetting.serect.json...电脑还可以在-[我的电脑]-[高级设置]-[环境变量]操作 在Visual Studio IDE launchsettings.json 设置进程级别环境变量 { "profiles": {...从env_file配置节加载环境变量文件 “① 文件中的环境变量并不会自动应用到容器,需要在Compose yml文件中以${}引用 ② docker-compose命令默认从命令执行的同一目录寻找....env文件 在Dockerfile内置环境变量 ASP.NETCore3.1 Runtime镜像作为基础镜像的应用, 会发现应用使用Production配置在80端口提供服务。

    2K30

    在Office应用中打开WPF窗体并且让子窗体显示在Office应用上

    在.NET主程序中,我们可以通过创建 ExcelApplication 对象来打开一个Excel应用程序,如果我们想在Excle里面再打开WPF窗口,问题就不那么简单了。...我们可以简单的实例化一个WPF窗体对象然后在Office应用程序的窗体上打开这个新的WPF窗体,此时Office应用的窗体就是WPF的宿主窗体。...然后宿主窗体跟Office应用并不是在一个UI线程上,子窗体很可能会在宿主窗体后面看不到。...下面方法是一个完整的方法,可以通过反射实例化一个WPF窗体对象,然后设置此WPF窗体对象为Office应用程序的子窗体,并正常显示在Office应用程序上。.../// /// 在Excle窗口上显示WPF窗体 /// /// <param name="assemplyName

    2.3K50

    iOS在应用中添加自定义字体 原

    iOS在应用中添加自定义字体 一、在应用中添加自定义字体的步骤 1、网上提供的字体库有很多,下载完成后,将其导入工程中,一般为ttf格式。...2、注意Build Phases中的Copy Bundle Resources中是否导入了文件: ? 3、在项目的info.plist文件中添加字体键值如下: ?...这个数组中可以添加多个元素,多个字体库。...4、这时实际上我们已经将字体添加进了工程中,但是在在使用这个字体时,字体的名字有时和文件名是不一样的,我们需要知道真实的字体名称,通常情况下,我们会讲所有字体名称打印出来:     for (NSString...为了在以后使用自定义字体的时候不必一次一次的经历这样的痛苦,在Xcode6.3的环境下,我将所有的系统字体获取后写入了plist文件,将这个plist文件导入项目中,通过如下方法,可以只打印出新增加的字体

    2.6K20
    领券