Questions tagged «objective-c-runtime»



10
为什么Objective-C不支持私有方法?
我已经看到了许多在Objective-C中声明半私有方法的策略,但是似乎没有一种方法可以实现真正的私有方法。我接受。但是,为什么会这样呢?我基本上说过的每一种解释都是:“你做不到,但这是一个近似值。” 有许多关键字适用于 ivars的是控制它们的范围内,例如(成员)@private,@public,@protected。为什么不能同时为方法完成此操作?似乎运行时应该能够支持。我是否缺少基本的哲学?这是故意的吗?

6
Swift本机基类或NSObject
我测试了一些用Swift 编写的isa,发现它仅在NSObject是超类(直接或更高级)或使用'@objc'装饰时才有效。否则,它将遵循静态和vtable-dispatch样式,例如C ++。 定义没有Cocoa / NSObject基类的Swift类是否正常?如果我担心的话,这意味着要放弃Objective-C的许多活力,例如方法拦截和运行时自省。 动态运行时行为位于属性观察器,核心数据,面向方面的编程,高阶消息传递,分析和日志记录框架等功能的核心。 使用Objective-C的方法调用样式会将大约20个机器代码操作数添加到方法调用中,因此在某些情况下(对带有小实体的方法进行许多紧密调用),C ++样式的静态和vtable分派可以更好地执行。 但是考虑到一般的95-5规则(95%的性能提升来自调整5%的代码),从强大的动态功能入手并在必要时进行强化是否有意义?

4
什么是objc_setAssociatedObject()?在什么情况下应使用它?
在我进行的一个项目中,原始作者选择使用它objc_setAssociatedObject(),但我并不确定100%做什么,或者为什么他们决定使用它。 我决定进行查找,但是不幸的是,文档对其用途的描述不是很明确。 objc_setAssociatedObject 使用给定的键和关联策略为给定的对象设置关联值。 void objc_setAssociatedObject(id object, void *key, id value, objc_AssociationPolicy policy) 参数 object 关联的源对象。 key 关联的密钥。 value 与对象的键相关联的值。传递nil以清除现有的关联。 policy 协会的政策。有关可能的值,请参见“关联对象行为”。 那么,该功能的作用到底是什么?在什么情况下应使用它? 阅读答案后进行编辑 那么下面的代码有什么意义呢? Device *device = [self.list objectAtIndex:[indexPath row]]; DeviceViewController *next = [[DeviceViewController alloc] initWithController:self.controller device:device item:self.rootVC.selectedItem]; objc_setAssociatedObject(device, &kDeviceControllerKey, next, OBJC_ASSOCIATION_RETAIN); 如果设备已经是实例变量,将其与视图控制器相关联又有什么意义呢?
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.