问题标签 [nsproxy]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
405 浏览

objective-c - 我可以自动释放 NSProxy 的实例吗?

NSProxy真的实现-autoreleaseand吗-release?如果没有,我需要手动dealloc NSProxy实例吗?(请假设我没有使用 GC)。

感谢您为我解决这个问题。

0 投票
2 回答
3023 浏览

cocoa - Mac OS X (Cocoa) 上的 CORBA

我目前正在研究在最初专注于 Mac OS X(使用 Cocoa)的项目中支持分布式模型对象(即在多台不同计算机上运行的计算模型)的不同方法。据我所知,有可能在NSProxy. 但似乎也有一些支持 Objective-C 的 CORBA 实现。

以后可能还需要支持/包括 Windows 机器。在这种情况下,我需要在 Windows 端使用类似 Gnustep 的东西(如果它运行良好,这可能是一个选项)或者想出两种技术的组合。或者手动编写一些东西(当然,这是最不可取的选择)。

我的问题是:

  1. 如果您对这两种技术(Cocoa 原生基础架构与 CORBA)都有经验,您能否指出这两种方法的一些关键特性/问题?(编辑:正如我在这个线程中已经指出的那样,到目前为止,iPhone 和 iPad 无法使用远程方法。另一方面,有 CORBA 实现可以在任一平台上运行,例如“ AdORB - CORBA ORB for Mac OS X和 iPhone 操作系统“。)

  2. 是否可以按照上述方式将 Gnustep 与 Cocoa 一起使用?[编辑:根据Gnustep 常见问题解答条目 1.1.5这是不可能的,所以使用 Cocoa 的本机基础设施将我锁定在这项技术中。]

  3. 使用 Cocoa 的技术在所有 Mac OS 客户端之间以及通过 CORBA 与 Windows 客户端进行通信是否有可能(并且相当可行,即比手动编写网络层更简单)?[编辑:从我现在了解到的情况来看,这是可能的,但肯定不可行。消息必须以两种方式转发,即一个系统需要一个“代理”来将消息从一个系统转发到另一个系统,反之亦然。这本质上等同于手动编写网络层,而没有从NSProxy类集群或 CORBA 中获得任何实际好处。]

更新:当灵活性和可扩展性是一个问题时,CORBA 似乎真的是一个更好的匹配。不利的一面是,最初学习和使用它似乎更复杂,请参阅此线程(由 Kristopher Johnson 提供的链接 - 谢谢!)以了解有关实际方面的不同观点。只要通信模式足够简单,Web 服务就是一个可行的选项,请参阅此线程以了解在 iOS 上运行良好的选项。我在这篇文章中总结了我的发现。

0 投票
3 回答
858 浏览

objective-c - Cocoa,NSProxy,如何接管对象中的方法?

我需要用我自己的实现替换对象中的方法。例如,

如何用我自己的方法替换 addObject?

换句话说,有没有办法addObject:用另一种实现替换特定对象的实现?

我一直在玩,NSProxy但找不到我应该做什么。

任何帮助将不胜感激。

谢谢

0 投票
4 回答
2248 浏览

iphone - 任何人成功使用 UIView 的 NSProxy(例如,UILabel?)

我正在尝试通过设置一个 NSProxy 子类来代替我选择的任何 UIView 来向我的 UIViews 添加功能(根据状态配置 CALayers)。这是我尝试过的:

在我的 NSProxy 子类中,我有以下代码:

而且,以这种方式使用我的 NSProxy 子类:

似乎可以工作,直到我点击 addSubview: 行。

打开消息跟踪 (instrumentObjcMessageSends(YES); ) 显示之前每个消息的转发工作,直到 addSubview: 的深处,这一系列方法调用显示在日志中(此处显示的第一条消息是通过代理):

我收到以下错误:

如果我不使用 NSProxy 子类而是使用 UILabel 子类(HFMultiStateLabel),它可以正常工作。这是调用 addSubview: 后发生的消息跟踪(HFNoteNameControl 是标签的父视图):

我可以验证使用 NSProxy 时,直到 -superlayer 之前的每个方法都被成功调用。出于某种原因,使用 NSProxy,UILabel 上的 superlayer 被调用而不是 CALayer。也许某处有些东西变得混乱并且 UILabel 被插入到子层而不是它的 CALayer 中?

我错过了什么吗?

UIKit 是否进行了某种绕过 NSProxy 挂钩的正常机制的优化?

其他想法?

谢谢!

亨利

PS我只在模拟器中试过这个,而不是设备。这种行为会有什么不同吗?

0 投票
2 回答
424 浏览

objective-c - 如何检测我拥有的对象是否真的是 NSProxy?

我在苹果 API 分发给我的一些更可疑的对象中闲逛了一下(比如 mutableArrayValueForKeyPath),这让我想知道苹果多久给我一次我认为是某个对象的东西,但实际上只是一个 NSProxy ,也就是偷偷地通知其他对象,或者过滤我的消息。

有没有办法判断一个对象是否是 NSProxy 的子类?他们似乎很擅长模仿他们所代表的一切。

0 投票
2 回答
3148 浏览

objective-c - NSProxy 如何“将自己转化为另一个对象”?

NSProxy类参考是这样说的:

通常,发往代理的消息被转发到真实对象或使代理加载(或将其自身转换为)真实对象。

“将自己转化为真实对象”究竟是如何工作的?

为了让事情更具体一点,假设类Foo有一个方法,该方法newFooWithString:接受一个字符串并返回一个新的Foo. 是否可以设置一个NSProxy坐在那里,如果pleaseBecomeAFooUsingString: @"bar"收到一条消息,将自己转换为[Foo newFooWithString: @"bar"],占用相同的内存,而不会弄乱可能存在的其他对自身的引用?

0 投票
1 回答
687 浏览

iphone - NSObject 为什么在 NSObject 和 NSProxy 中都声明了 alloc 而保留在 NSObject 协议中

在 NSObject 协议中声明了保留。

因此 NSObject 类和 NSProxy 类实现了它。

然而 NSProxy 和 NSObject 类都有一个 alloc。

为什么在 NSObject 协议中没有声明 alloc?

附带问题:NSObject 协议还用于存储方法的类版本,因为实例方法在 NSObject 类中。有什么可以阻止在 NSObject 协议中声明类和实例。为什么要把他们分开?

干杯

0 投票
2 回答
3589 浏览

objective-c - Objective-C - NSProxy 类有哪些用途?

NSProxy 类有哪些用途。为什么您希望能够对不存在的对象进行描述?

0 投票
2 回答
2310 浏览

objective-c - NSProxy 和键值观察

NSProxy对于那些尚不存在的对象,似乎可以很好地作为替代对象。例如。

上面的代码将透明地将任何方法调用传递给代理所代表的目标。但是,它似乎无法处理目标上的 KVO 观察和通知。我尝试使用NSProxy子类作为要传递给的对象的代表NSTableView,但出现以下错误。

有没有办法让NSProxyKVO 兼容的透明化?

0 投票
3 回答
2014 浏览

objective-c - 如何在 ARC 下获得 OCMock 以停止使用弱属性来取消 NSProxy 子类集?

在 下ARC,我有一个对象,Child它有一个weak属性,parent。我正在尝试为 编写一些测试Child,并且我正在parent使用OCMock.

在 ARC 下,NSProxy使用综合的弱属性设置器设置子类不会设置属性...设置弱属性之后的行,检查它表明它已经是nil. 这是一个具体的例子:

我知道我可以使用assign属性而不是引用的weak属性来解决这个问题,但是当我完成它时我必须退出(就像某种穴居人),这正是那种ARC应该避免的事情。ChildParentnilparent

关于如何在不更改我的应用程序代码的情况下通过此测试的任何建议?

编辑:它似乎与OCMockObject成为一个有关NSProxy,如果我做aParent一个实例NSObjectchild.parent弱引用“持有”一个非零值。仍在寻找一种在不更改应用程序代码的情况下通过此测试的方法。

编辑 2:在接受 Blake 的回答后,我在我的项目中执行了一个预处理器宏的实现,它有条件地将我的属性从弱 -> 分配。你的旅费可能会改变: