使用objection来模块化开发iOS项目

Objection简单使用示例(源码) Objection是一个轻量级的依赖注入框架,附件提供了一个简单的示例,可以执行运行。 立即下载

原文地址

objection 是一个轻量级的依赖注入框架,受Guice的启发,Google Wallet 也是使用的该项目。「依赖注入」是面向对象编程的一种设计模式,用来减少代码之间的耦合度。通常基于接口来实现,也就是说不需要new一个对象,而是通过相关的控制器来获取对象。2013年最火的PHP框架 laravel 就是其中的典型。

假设有以下场景:ViewControllerA.view里有一个button,点击之后push一个ViewControllerB,最简单的写法类似这样:

- (void)viewDidLoad
{
    [super viewDidLoad];
    UIButton *button = [UIButton buttonWithType:UIButtonTypeSystem];
    button.frame = CGRectMake(100, 100, 100, 30);
    [button setTitle:@"Button" forState:UIControlStateNormal];
    [button addTarget:self action:@selector(buttonTapped) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:button];
}

- (void)buttonTapped
{
    ViewControllerB *vc = [[ViewControllerB alloc] init];
    [self.navigationController pushViewController:vc animated:YES];
}

这样写的一个问题是,ViewControllerA需要import ViewControllerB,也就是对ViewControllerB产生了依赖。依赖的东西越多,维护起来就越麻烦,也容易出现循环依赖的问题,而objection正好可以处理这些问题。

实现方法是:先定义一个协议(protocol),然后通过objection来注册这个协议对应的class,需要的时候,可以获取该协议对应的object。对于使用方无需关心到底使用的是哪个Class,反正该有的方法、属性都有了(在协议中指定)。这样就去除了对某个特定Class的依赖。也就是通常所说的「面向接口编程」。

JSObjectionInjector *injector = [JSObjection defaultInjector]; // [1]
UIViewController <ViewControllerAProtocol> *vc = [injector getObject:@protocol(ViewControllerAProtocol)]; // [2]
vc.backgroundColor = [UIColor lightGrayColor]; // [3]
UINavigationController *nc = [[UINavigationController alloc] initWithRootViewController:vc];
self.window.rootViewController = nc;
  • [1] 获取默认的injector,这个injector已经注册过ViewControllerAProtocol了。
  • [2] 获取ViewControllerAProtocol对应的Object。
  • [3] 拿到VC后,设置它的某些属性,比如这里的backgroundColor,因为在ViewControllerAProtocol里有定义这个属性,所以不会有warning。

可以看到这里没有引用ViewControllerA。再来看看这个ViewControllerAProtocol是如何注册到injector中的,这里涉及到了Module,对Protocol的注册都是在Module中完成的。Module只要继承JSObjectionModule这个Class即可。

@interface ViewControllerAModule : JSObjectionModule
@end

@implementation ViewControllerAModule
- (void)configure
{
    [self bindClass:[ViewControllerA class] toProtocol:@protocol(ViewControllerAProtocol)];
}
@end

绑定操作是在configure方法里进行的,这个方法在被添加到injector里时会被自动触发。

JSObjectionInjector *injector = [JSObjection defaultInjector]; // [1]
injector = injector ? : [JSObjection createInjector]; // [2]
injector = [injector withModule:[[ViewControllerAModule alloc] init]]; // [3]
[JSObjection setDefaultInjector:injector]; // [4]
  • [1] 获取默认的 injector
  • [2] 如果默认的 injector 不存在,就新建一个
  • [3] 往这个 injector 里注册我们的 Module
  • [4] 设置该 injector 为默认的 injector

这段代码可以直接放到 + (void)load里执行,这样就可以避免在AppDelegate里import各种Module。

因为我们无法直接获得对应的Class,所以必须要在协议里定义好对外暴露的方法和属性,然后该Class也要实现该协议。

@protocol ViewControllerAProtocol <NSObject>
@property (nonatomic) NSUInteger currentIndex;
@property (nonatomic) UIColor *backgroundColor;
@end

@interface ViewControllerA : UIViewController <ViewControllerAProtocol>
@end

通过objection实现依赖注入后,就能更好地实现SRP(Single Responsibility Principle),代码更简洁,心情更舒畅,生活更美好。拿Pinterest来说,下面的页面就可以划分为3个Section。

这里写图片描述

各个Section可以由不同的人负责,然后串到一起就行,也能一定程度地避免MVC(Mess View Controller)的出现。

总体来说,这个lib还是挺靠谱的,已经维护了两年多,也有一些项目在用,对于提高开发成员的效率也会有不少的帮助,可以考虑尝试下。

—- update (2014-04-30) —-

写了个壁纸的demo,https://github.com/lzyy/bizhi

从零解析:富斯i6遥控器与STM32的IBUS协议通信实战 本文详细解析了富斯i6遥控器与STM32通过IBUS协议通信的实战指南,涵盖硬件准备、协议解析、驱动实现及常见问题解决。特别适合机器人及智能小车开发者,提供低成本、高可靠性的无线控制方案,助力快速实现多通道控制功能。 阅读详情

相关推荐

Comsol超声空化气泡仿真入门:从零搭建模型到网格划分的完整流程

本文详细介绍了使用Comsol进行超声空化气泡仿真的完整流程,从物理基础理解到模型搭建、网格划分及求解器设置。通过具体步骤和示例代码,帮助初学者和工程师快速掌握这一关键技术,应用于医疗设备和工业清洗等领域。

weixin_29289821的博客 165

iOS 依赖注入:Objection 和 Typhoon

【依赖注入】(Dependency Injection) 是面向对象编程的一种设计模式,用来减少代码之间的耦合度。通常基于接口来实现,也就是说:不需要亲自new一个对象,而是通过相关的控制器来获取对象。

LOLITA0164的博客 1184

激光甲烷传感器DIY指南:从DFB激光器选型到Herriott池光路搭建

本文详细介绍了如何DIY激光甲烷传感器,从DFB激光器选型到Herriott池光路搭建的全过程。通过TDLAS技术实现ppm级甲烷检测,适用于家用燃气泄漏监测和农业沼气监测等场景。文章包含核心器件选型、光路搭建技巧、信号调理方案及系统集成优化,为创客提供实用指南。

f9g0h的博客 594

iOS 依赖注入与Objection

iOS 依赖注入与Objection 依赖注入 首先先说明什么叫做依赖注入 比如AController跳转到BController,那么这时候BController就需要在AController内部进行实例化,如下 @implementation AController : UIViewController ... - (void)jump { BController *bController = [[BController alloc] init]; [self.navigati

box_kun的博客 688

Win10系统权限深度解析:如何安全地将C盘所有者从TrustedInstaller变更为Administrators

本文深入解析了Win10系统中C盘文件权限管理的核心机制,解释了为何管理员账户(Administrators)默认无法修改由TrustedInstaller保护的系统文件。文章在强调安全风险的前提下,详细提供了通过图形界面和命令行两种方式,将文件或文件夹所有权从TrustedInstaller安全变更为Administrators的实操步骤,并给出了关键的风险预警与权限恢复方法。

weixin_29305313的博客 549

LTE信令流程及业务流程

eNB返回E-RAB建立响应消息,E-RAB建立列表信息中包含成功建立的承载信息,E-RAB建立失败列表消息中包含没有成功建立的承载消息。3)当下行数据达到时,网络侧先对UE进行寻呼,随后UE发起随机接入过程,并发起service request过程。用户面:S-GW向eNB发送承载建立请求,包含(IMSI, QoS, TFT, TEID, LBI等)控制面:MME向eNB发送E-RAB建立请求,包含E-RAB ID,QoS,S-GW TEID。3)在S1接口上建立S1承载,在Uu接口上建立数据无线承载。

qq_44390640的博客 4582

《挑战不用macOS逆向iOS APP》之ObjC语法、iOS应用开发、及Objection自动化hook入门

本篇文章是《挑战不用macOS逆向iOS APP》系列的第二课iOS逆向基础知识主要为了了解在iOS APP逆向过程中一些常见知识

大数据安全技术学习 4万+

[ATF]-smc指令详解

1、在ree/tee调用smc之前 2、调用smc之后,cpu触发同步异常,进入ATF的sync_exception_aarch64—>handle_sync_exception—>smc_handler64处理函数 在smc_handler64中又调用了smc_handler func smc_handler64 /* ---------------------------------------------- * Detect if this is a RUN_IMAGE or ot

baron-周贺贺-代码改变世界ctw 1万+

Objection动态分析App

一、Objection针对所有支持的平台,提供了下列核心功能2 (一)Android特殊功能2 (二)iOS特殊功能2 二、搭建Objection测试环境2 三、使用Objection测试分析移动App3 一、Objection针对所有支持的平台,提供了下列核心功能 (1)修复iOS和Android应用程序,嵌入了Frida实用工具。 (2)与文件系统交互,枚举条目以及上传/下载的文件。 (3)执行各种内存相关任务,例如列举加载的模块以及相关的输出。 (4)尝试绕过或...

哆啦安全 4083

YOLO11优化:TGRS2026 CKConv结合C3k2 | 方向特征与跨阶段融合协同,小目标漏检率大幅下降

多尺度适配小目标尺寸变化:在 C3k2 不同阶段配置 CKConv 不同核尺度(浅层小核捕获精细纹理,深层大核聚合上下文),兼顾局部细节与全局感知,提升对舰船、车辆等小尺寸目标及红外热目标的检测鲁棒性。

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 564

【一 扣子客户案例合集】【 1.3 识典古籍基于扣子智能助手的古籍数字化全流程技术解析】

古籍数字化智能处理系统全流程解析 本文详细介绍了基于扣子智能助手的古籍数字化解决方案,核心技术包括: 多层级架构设计:采用"云-边-端"三层次架构,整合高精度扫描设备与AI处理模块,实现从物理古籍到结构化数据的全流程自动化。 智能图像处理:通过12道预处理工序(包括畸变校正、污渍去除和对比度增强)处理古籍图像,采用改进的EAST算法和ViT模型实现高精度文字检测与识别,准确率达98.7%。 NLP增强处理:结合Transformer-XL预训练模型和N-gram语言模型进行文本校正,基于

商务合作|问题讨论|交流学习 请联系作者微信,加微信请务必注明来意,博客主页有联系方式 1440

objection来模块化开发iOS项目

objection 是一个轻量级的依赖注入框架 「依赖注入」是面向对象编程的一种设计模式,用来减少代码之间的耦合度。通常基于接口来实现,也就是说不需要new一个对象,而是通过相关的控制器来获取对象。2013年最火的PHP框架 laravel 就是其中的典型。 具体使用如下: 1、首先创建 protocol文件 @protocol PPHomeViewControllerProtoco

追梦 2983

深度测评:Accio Work——目前普通用户最友好的多 Agent 协同工具

摘要:Accio Work是阿里国际站推出的多Agent协同工具,通过借鉴古代"三省六部制"构建高效协作框架。该工具支持主流大模型,可配置专业Agent角色,实现40分钟内完成复杂产品PRD等高效协作。其亮点在于直观的UI设计和流程驱动机制,能强制各Agent从专业视角深度思考。虽然超长对话稳定性有待优化,但作为目前最用户友好的多Agent工具,显著降低了构建复杂AI团队的门槛,成为提升个人和小微企业生产力的利器。

Maynor的博客 1730

ios经验收藏 使用objection来模块化开发iOS项目

objection 是一个轻量级的依赖注入框架,受Guice的启发,Google Wallet 也是使用的该项目。「依赖注入」是面向对象编程的一种设计模式,用来减少代码之间的耦合度。通常基于接口来实现,也就是说不需要new一个对象,而是通过相关的控制器来获取对象。2013年最火的PHP框架 laravel 就是其中的典型。 假设有以下场景:ViewControllerA.view里有一个bu

pingamor的专栏 848

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

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

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

突破移动应用调试壁垒:objection自定义工具开发实战指南

objection是一款强大的移动应用运行时探索工具,专为Android和iOS平台设计,能够帮助开发者和安全研究人员深入分析移动应用的内部结构与行为。无论是绕过SSL固定、查看应用沙箱文件,还是调试原生代码,objection都提供了直观的命令行界面和丰富的功能模块,让移动应用调试工作变得简单高效。 ## 📱 objection核心功能解析 objection基于Frida框架开发,提供了

gitblog_00793的博客 978

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

跨平台移动安全测试:objection一套脚本适配iOS与Android的实战指南

objection是一款强大的跨平台移动安全测试工具,能够帮助安全测试人员在iOS和Android设备上进行运行时探索与分析。通过单一脚本即可实现对两大移动平台的安全评估,极大提升了移动应用安全测试的效率与便捷性。 ## 📱 为什么选择objection进行移动安全测试? 在移动应用安全测试领域,针对不同平台往往需要使用不同的工具和方法,这给测试工作带来了诸多不便。objection的出现彻

gitblog_01166的博客 531

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Objection框架入门:如何用轻量级依赖注入简化Objective-C开发

Objection是一个轻量级的Objective-C依赖注入框架,它能帮助开发者简化对象间的依赖管理,提高代码的可测试性和可维护性。通过依赖注入模式,Objection让对象的创建和依赖解析变得更加灵活和清晰,特别适合在复杂的iOS或macOS项目中使用。 ## 🚀 为什么选择Objection框架? 在传统的Objective-C开发中,对象间的依赖关系往往通过直接实例化或单例模式来管理

gitblog_00184的博客 513

终极指南:掌握objection移动安全测试工具的实战技巧

objection是一款基于Frida的运行时移动应用探索工具包,专为安全研究人员和开发者设计,用于评估移动应用程序的安全性而无需越狱操作。这款强大的工具支持iOS和Android双平台,提供文件系统检查、SSL证书绑定绕过、钥匙链数据提取、内存操作等核心功能,帮助您快速发现和修复移动应用的安全漏洞。 ## 问题导向:移动应用安全测试的常见挑战 在移动应用安全测试过程中,安全研究人员经常面临诸

gitblog_00493的博客 409

2025最新突破:objection高级Hook技术零基础入门指南

你还在为移动应用安全测试中的SSL固定、证书锁定等防御机制头疼吗?作为开发者或测试人员,是否曾因无法深入分析应用运行时行为而停滞不前?本文将带你全面掌握objection这款强大的移动应用运行时探索工具,无需复杂逆向工程知识,即可轻松绕过主流应用防御机制,实现高级Hook操作。 读完本文你将获得: - 3分钟快速搭建objection测试环境 - Android/iOS平台通用Hook技术实战指...

gitblog_00896的博客 503

5大核心技术突破:Objection移动安全探索工具的深度解析

在移动应用安全评估领域,开发者和安全研究人员面临着前所未有的挑战。随着移动应用的复杂性和安全性要求不断提升,传统的静态分析方法已难以应对动态运行时环境的复杂性。Objection作为一款基于Frida的运行时移动探索工具包,通过创新的技术架构和强大的动态插桩能力,为移动应用安全评估带来了革命性的解决方案。 ## 架构创新:双引擎驱动的运行时安全分析 Objection的技术架构采用了独特的Py

gitblog_00923的博客 330
上一篇: 轻量级低风险 iOS 热更新方案
下一篇: swift中delegate的使用注意
Philm_iOS
博客等级 码龄8年 74粉丝 53原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值