首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何让ARC下的OCMock停止使用弱属性来设置NSProxy子类?

在ARC下,OCMock默认使用弱属性来设置NSProxy子类。如果想停止使用弱属性,可以通过以下步骤实现:

  1. 在OCMock的头文件中,找到名为OCMStubRecorder的类。
  2. 在该类中,找到名为andReturn的方法。
  3. andReturn方法中,找到对returnValue属性的赋值语句。
  4. 将该赋值语句修改为使用强引用属性,而不是弱引用属性。

修改后的代码示例:

代码语言:objective-c
复制
- (id)andReturn:(id)anObject
{
    // 将原来的弱引用属性改为强引用属性
    self.returnValue = anObject;
    return self;
}

这样修改后,OCMock将使用强引用属性来设置NSProxy子类,而不再使用弱引用属性。

需要注意的是,修改OCMock源码可能会导致不可预测的问题,建议在修改前备份原始代码,并进行充分的测试。

关于OCMock的更多信息和使用方法,可以参考腾讯云的产品介绍链接:OCMock产品介绍

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

iOS NSPROXY ARC填坑记

看来就是这了 接着看proxy和delegate之间联系 proxy是nsproxy子类 通过一个引用,引用delegate 这里一个知识点:nsproxy作为代理更为轻量,因为 NSProxy...代理中完成转发,具体参考 http://tanhao.me/code/160702.html/ 这里使用了nsproxy主要在转发时,进行http截取,然后再进行真正转发 既然做转发,就在每次转发时打印一.../article/details/80895450 问题又一次陷入了僵局 最后,不死心试将proxy--->delegate 引用变成强引用 成功了!...NSProxyARC引用属性,会被强制置空,不要怀疑,亲测有效 https://joris.kluivers.nl/blog/2012/03/26/weak-references-to-nsproxy-with-arc.../ https://oomake.com/question/2426222 https://stackoverflow.com/questions/9104544/how-can-i-get-ocmock-under-arc-to-stop-nilling-an-nsproxy-subclass-set-using-a-w

55220
  • 【iOS】我Objective-C学习笔记

    ,是个对象方法,-开头 重写构造方法目的:为了对象创建出来,成员变量就会有一些固定值 重写构造方法注意点: 1.先调用父类构造方法([super init]) 2.再进行子类内部成员变量初始化...initialize方法,再调用子类+initialize方法) 7.利用NSLog和%@输出对象 默认情况,利用NSLog和%@输出对象时,结果是: 1.会调用对象p-description...2.根据SEL数据找到对应方法地址 3.根据方法地址调用对应方法 9.ARC ARC判断准则:只要没有强指针指向对象,就会释放对象 1.ARC特点 1> 不允许调用release、retain...weak :成员变量是指针(适用于OC对象类型) assign : 适用于非OC对象类型 4> 以前retain改为用strong 指针分2种: 1> 强指针:默认情况,所有的指针都是强指针...__strong 2> 指针:__weak 10.循环引用 当两端循环引用时候,解决方案: 1> ARC 1端用strong,另1端用weak 2> 非ARC 1端用retain,另

    14830

    iOS_Effective Objective-C 20 编写高质量iOS与OS X代码52个有效方法

    : 可以用@property语法定义对象中所封装数据 通过“特质”指定存储数据所需正确语义 在设置属性所对应实例变量时,一定要遵从该属性所声明语义 7、在对象内部尽量直接访问实例变量 ​ 建议...:读取变量时用直接访问实例变量形式,设置变量时通过属性做。...type) // 不管返回什么类型对象,都是继承自同一个基类:UIButton // 意义:使用者无须关心属于哪个类,和其绘制等实现细节,只须知道如何创建,如何设置如何使用就好 + (UIButton...这样对象叫做“代理”(proxy),通常继承自NSProxy。通常在此对象上调用class方法,返回是代理对象本身(NSProxy子类),而非接受代理对象所属类。...---- 33、以引用避免保留还 要点: 将某些引用设置为weak,可避免出现“保留环” weak引用可自动清空,也可以不自动清空。

    1.1K40

    精选面试题教你应对高级iOS开发面试官(提供底层进阶规划蓝图)

    ;他们之间可能进行赋值操作,为确保对象中字符串值不会无意间变动,应该在设置属性值时拷贝一份。...1、添加,删除,修改数组内元素时候,程序会因为找不到对应方法而崩溃,因为copy 就是复制一个不可变NSArray对象; 2、使用了atomic属性会严重影响性能﹔ 如何自己类用copy修饰符...不需要,在ARC环境无论是强指针还是指针都无需在 dealloc设置为 nil,ARC 会自动帮我们处理,即便是编译器不帮我们做这些,weak也不需要在dealloc中置nil,runtime内部已经帮我们实现了...时 在@protocol中定义所有属性 在category中定义所有属性 重载属性,当在子类中重载了父类中属性,必须使用@synthesize手动合成ivar objc中向一个nil对象发送消息将会发生什么...✍ 万水千山总是情,点赞收藏行不行,还望各位大侠多多支持❤️ 使用runtime Associate方法关联对象,需要在主对象dealloc时候释放么? 无论在MRC还是ARc均不需要。

    53900

    NSObject头文件解析 消息机制 Runtime解读 (一)

    [super doesNotRecognizeSelector:aSelector]; } 当我们调用该类实例不存在方法时, 就会先打印"调用了不存在方法", 然后再crash 也可以使用这个方法对象不能响应某一个方法....html 讲解得很透彻 super class: 指向该类父类,如果该类已经是最顶层根类(如NSObject或NSProxy),则super_class为NULL 当我们调用superClass...时返回就是这个Class类名, 调用[super method];时就是子类去调用父类中这个方法(注意是子类调用, 而不是父类, 只是从父类中取得方法地址而已) 这部分可能有些人会有一点疑惑, 我们讲..., 只有superclass才是父类名称 [super method];方法调用对象还是子类 name: 类名称 可以用class_getName()获得 version: 我们可以使用这个字段提供类版本信息...*name) 设置对象指定成员变量值: (设置obj对象ivar成员属性值为value) void object_setIvar(id obj, Ivar ivar, id value) 或者对象指定成员变量

    1.3K31

    Swift基础 自动参考计数

    然而,在少数情况ARC需要有关代码部分之间关系更多信息,以便为您管理内存。本章介绍了这些情况,并展示了如何启用ARC管理应用程序所有内存。...ARC工作原理 每次您创建类新实例时,ARC都会分配一大块内存存储有关该实例信息。此内存包含有关实例类型信息,以及与该实例关联任何存储属性值。...因此,当它引用实例被释放时,ARC会自动将引用设置为nil。而且,由于引用需要允许其值在运行时更改为nil,因此它们总是声明为可选类型变量,而不是常量。...您可以像任何其他可选值一样,检查引用中是否存在值,并且您永远不会引用不再存在无效实例。 注意 当ARC引用设置为nil时,不会调用属性观察者。...您还看到了如何使用引用和无名引用来打破这些强引用周期。 如果您为类实例属性分配闭包,并且该闭包主体捕获实例,也可能发生强引用周期。

    12000

    基础篇-ObjectC继承、类别、属性

    对于界面相似度很高情况,使用继承可以节省很多代码和设置,只需要在子类中重写父类中方法,或者增加新子类方法即可,代码非常简洁维护起来也很方便。下面小节下相关知识,供需要朋友查看。   ...继承好处: (1)抽取出了重复代码 (2)建立了类和类之间联系 继承缺点:耦合性太强 属性 在OC中定义变量,可以自己定义变量setter方法设置变量值,用getter方法获取变量值...(通过类别和runtime 对相关联技术生成新属性时,无法使用这个这个设置,只能使用@dynamic) 编译器期间,编译器自动生成getter/setter方法。...iOS 5 中对属性设置新增了strong 和weak关键字修饰属性(iOS 5 之前不支持ARC) strong   用来修饰强引用属性,一块内存(一个对象)当没有 strong 类型指针指向它时...所以,如果一般情况,我们都不希望字串值跟着str变化,所以我们一般用 copy 设置string属性。如果希望字串值跟着赋值字串值变化,可以使用 strong,retain。

    1.9K10

    iOS面试题梳理(一)

    矫情一,言归正传,我奉献一,为iOS应聘者梳理一面试题,希望能助一臂之力! OC理解与特性 OC作为一门面向对象语言,自然具有面向对象语言特性:封装、继承、多态。...事实上,由于静态类型固定性和可预知性,从而使用更加广泛。静态类型是强类型,而动态类型属于类型,运行时决定接受者。...3.动态加载:根据需求加载所需要资源,最基本就是不同机型适配,例如,在Retina设备上加载@2x图片,而在老一些普通苹设备上加载原图,程序在运行时添加代码模块以及其他资源,用户可根据需要加载一些可执行代码和资源...其他方法创建对象,不需要由你管理内存。...11.在ARC工程采用非ARC去编译某些类:-fno-fobjc-arc

    1.1K60

    OC-基础总结(二)

    强指针与指针 强指针: 默认情况,声明1个指针,这个指针就是1个强指针。 我们也可以使用__strong显示声明这是1个强指针。 Person *p1; // 这是1个强指针....指针默认情况都是1个强指针。 __strong Person *p2; // 这也是1个强指针.使用__strong显示声明强指针。 指针: 使用__weak标识指针就叫做指针。...在ARC机制,当对象被回收时候,原来指向这个对象指针会被自动设置为nil。...在ARC机制,如果属性类型是OC对象类型,绝大多数场景使用strong。 2). 在ARC机制,如果属性类型不是OC对象类型,使用assign。 3)....使用命令-fno-objc-arc设置部分类使用MRC。 6).

    959100

    Swift 内存管理详解

    为了结局上面的强引用循环,我们就必须一方先放手,允许对方先释放。...Swift这时候提供了两种机制: 引用和无主引用 三:使用引用解决强引用循环 引用不会增加对方引用计数,因此不会阻止ARC回收被引用实例,这样就避免了形成强引用循环, 在定义属性 var...注意点:      1 : 引用变量要求该变量必须要能被设置成 nil ,也就是引用属性最好是使用可选类型定义。      ...2 : 引用属性只能声明为变量类型,因为该属性在运行期内只有可能会发生变化,因此不能设置成常量。      3 :也没必要把两个相互引用属性设置引用,有一个就可以了。      ...所以,要是使用引用解决上面的强引用循环,只需按下面声明属性: // 修改teacher类 student 为引用属性 weak var student1:student?

    1.7K90

    iOS - 老生常谈内存管理(二):从 MRC 说起

    在MRC年代,我们经常需要写retain、release、autorelease等方法手动管理对象内存,然而这些方法在ARC是禁止调用,调用会引起编译报错。   ...ARC,系统使用与MRC相同引用计数系统,但是它会在编译时为我们插入适当内存管理方法调用。使用ARC,我们通常就不需要了解本文章中描述MRC内存管理实现,尽管在某些情况它可能会有所帮助。...使用访问器方法内存管理更轻松 如果类中有对象类型属性,则你必须确保在使用过程中该属性赋值对象不被释放。因此,在赋值对象时,你必须持有对象所有权,其引用计数加 1。...在MRC中,这里引用” 是指do not retain,而不是ARCweak。...在大多数情况引用对象知道其它对象对它引用,就像循环引用情况一样,你要负责在引用对象销毁时通知其它对象。

    1.6K21

    iOS应用开发:什么是ARC

    简单地理解ARC,就是通过指定语法,编译器(LLVM 3.0)在编译代码时,自动生成实例引用计数管理部分代码。...] 由于ARC并不是GC,并需要一些规则编译器支持代码插入,所以必须清楚清楚了这些规则后,才能写出健壮代码。...ARC方法:在targetsbuild phases选项下Compile Sources选择要不使用arc编译文件,双击它,输入-fno-objc-arc即可 属性值 关键字 所有权 strong...并且,delegate 和 Outlet 应该用 weak 属性声明。同时,如上一回介绍 iOS 5 之前版本是没有 __weak 关键字,所以 weak 属性是不能使用。...读写相关属性 (readwrite, readonly) 读写相关属性有 readwrite 和 readonly 两种,如果使用ARC之后,我么需要注意一 readonly 属性使用。

    1.1K60

    Swift 自己主动引用计数机制ARC「建议收藏」

    Swift 使用自己主动引用计数(ARC)这一机制跟踪和管理你应用程序内存。通常情况,Swift 内存管理机制会一直起着作用,你无须自己考虑内存管理。...ARC 会在类实例不再被使用时,自己主动释放其占用内存。 然而,在少数情况ARC 为了能帮助你管理内存,须要很多其它关于你代码之间关系信息。本章描写叙述了这些情况。...而且为你示范如何启用 ARC 管理你应用程序内存。 注意: 引用计数只应用于类实例。结构体和枚举类型是值类型,不是引用类型,也不是通过引用方式存储和传递。...ARC 释放实例所占用内存,并释放内存能挪作他用。 这确保了不再被使用实例,不会一直占用内存空间。 然而。当 ARC 收回和释放了正在被使用中实例。该实例属性和方法将不能再被訪问和调用。...详细过程在解决类实例之间循环强引用中有描写叙述。无论如何。在你学习如何解决循环强引用之前,非常有必要了解一它是如何产生。 以下展示了一个不经意产生循环强引用样例。

    65120

    PICK一,iOS自动化测试新方案出道

    而FeedDetailPanelView是FeedDetailCell一个属性 ?...,获取需要实例对象 调用获取实例中方法,做用例需要做事 断言 NTElement说明:如何在内存中找到需要实例对象呢?...第三个用例:使用OCmock,mock网络请求返回网络有问题 ? 四、用例编写技巧 用例编写与断言是自动化测试一块核心内容,如何快速地编写又快又好用例,这其中也有很多技巧。...这里我们尽量结合实际例子给大家讲解一些写用例一些技巧和方法,大家能够更快地进行用例编写。...UI自动化需要频繁定位控件,写起用例很繁琐,而且存在控件不好定位问题。 OCMock单元测试需要MOCK数据,构造起来很复杂,而且有些数据还不好MOCK,编写难度较大,效率较低。

    2.3K61

    开心档之计数(ARC

    Swift 自动引用计数(ARC) Swift 使用自动引用计数(ARC)这一机制跟踪和管理应用程序内存 通常情况我们不需要去手动释放内存,因为 ARC 会在类实例不再被使用时,自动释放其占用内存...ARC 功能 当每次使用 init() 方法创建一个类实例时候,ARC 会分配一大块内存用来储存实例信息。 内存中会包含实例类型信息,以及这个实例所有相关属性值。...当实例不再被使用时,ARC 释放实例所占用内存,并释放内存能挪作他用。 为了确保使用中实例不会被销毁,ARC 会跟踪和计算每一个实例正在被多少属性,常量和变量所引用。...module = nil 以上程序执行输出结果为: ARC 学生分数为 98 ---- 闭包引起循环强引用 循环强引用还会发生在当你将一个闭包赋值给类实例某个属性,并且这个闭包体中又使用了实例。...实例 下面的例子为你展示了当一个闭包引用了self后是如何产生一个循环强引用

    62020

    开心档之Swift 自动引用计数(ARC

    Swift 自动引用计数(ARC) Swift 使用自动引用计数(ARC)这一机制跟踪和管理应用程序内存 通常情况我们不需要去手动释放内存,因为 ARC 会在类实例不再被使用时,自动释放其占用内存...ARC 功能 当每次使用 init() 方法创建一个类实例时候,ARC 会分配一大块内存用来储存实例信息。 内存中会包含实例类型信息,以及这个实例所有相关属性值。...当实例不再被使用时,ARC 释放实例所占用内存,并释放内存能挪作他用。 为了确保使用中实例不会被销毁,ARC 会跟踪和计算每一个实例正在被多少属性,常量和变量所引用。...module = nil 以上程序执行输出结果为: ARC 学生分数为 98 ---- 闭包引起循环强引用 循环强引用还会发生在当你将一个闭包赋值给类实例某个属性,并且这个闭包体中又使用了实例。...实例 下面的例子为你展示了当一个闭包引用了self后是如何产生一个循环强引用

    55520

    iOS-底层原理36:内存优化(一) 野指针探测

    本文主要讲解两种野指针检测原理及实现 技术点:野指针探测 本文主要目的是理解野指针形成过程以及如何去检测野指针 引子 在介绍野指针之前,首先说下目前异常处理类型,附上苹果官网链接) 异常类型...,所以这里采用代理类(即继承自NSProxy子类),重写消息转发三个方法(参考这篇文章iOS-底层原理 14:消息流程分析之 动态方法决议 & 消息转发),以及NSObject实例方法,获取异常信息...实现NSProxy代理子类 <!...给僵尸对象发送消息的话,它仍然是可以响应,然后会发生崩溃,并输出错误日志显示野指针对象调用类名和方法 苹果僵尸对象检测原理 首先我们来看下Xcode中僵尸对象是如何实现,具体操作步骤可以参考这篇文章...,这里同样需要创建NSProxy子类 具体实现 1、创建NSProxy子类,其实现与上面的MIZombieProxy是一模一样 2、hook dealloc函数具体实现 <!

    2.2K31
    领券