相关疑难解决方法(0)

何时在swift代码中使用@objc?

我是swift的新手,我看到一些方法,如:

@objc private func doubleTapGestureRecognized(recognizer: UITapGestureRecognizer)
Run Code Online (Sandbox Code Playgroud)

我想知道什么时候使用@objc?我读了一些文档,但是他们说当你希望它在Objective-C中可以调用时,你应该添加@objc标志

但是,这是一个快速的私有函数,@ obj做了什么?

private objective-c selector ios swift

74
推荐指数
5
解决办法
4万
查看次数

Objective C消息调度机制

我只是盯着玩Objective C(编写玩具iPhone应用程序),我很好奇用于发送消息的底层机制.我非常了解C++中的虚函数通常是如何实现的,以及相对于静态或非虚方法调用的成本是多少,但我没有任何Obj-C背景知道如何发送消息.浏览我发现这个松散的基准测试,它提到IMP缓存的消息比虚函数调用更快,而虚拟函数调用反过来比标准消息发送更快.

我不是要优化任何事情,只是更深入地了解消息的分派方式.

  • 如何发送Obj-C消息?
  • 实例方法指针如何被缓存,你是否(通常)通过阅读代码告诉消息是否会被缓存?
  • 类方法本质上与C函数(或C++中的静态类方法)相同,还是有更多的东西?

我知道其中一些问题可能是"依赖于实现的",但实际上只有一个实现非常重要.

performance objective-c

59
推荐指数
2
解决办法
2万
查看次数

Cocoa与Cocoa Touch-有什么区别?

我正在使用Objective-C学习iOS开发,我发现了很多代码示例.

但是,他们中的一些人说他们只适用于Mac OS X(不是iOS).

有人可以向我解释一下Cocoa和Cocoa Touch之间有什么区别(在图书馆一级),这样我才知道哪些代码可以工作,哪些代码不起作用?

cocoa cocoa-touch objective-c

43
推荐指数
4
解决办法
3万
查看次数

如何实现swift swift 3.0的方法?

如何在Swift 3.0中实现方法调配?

我已经阅读了关于它的nshipster文章,但是在这个代码的块中

struct Static {
    static var token: dispatch_once_t = 0
}
Run Code Online (Sandbox Code Playgroud)

编译器给我一个错误

dispatch_once_t在Swift中不可用:改为使用延迟初始化的全局变量

xcode swizzling ios swift swift3

37
推荐指数
3
解决办法
2万
查看次数

Swift 3 - 动态vs @objc

将方法标记为@objc与动态之间的区别是什么,何时执行一个与另一个相比?

以下是Apple对动态的定义.

dynamic将此修饰符应用于可由Objective-C表示的类的任何成员.使用动态修饰符标记成员声明时,始终使用Objective-C运行时动态调度对该成员的访问.编译器从不内联或不虚拟化对该成员的访问.

因为使用Objective-C运行时调度使用dynamic修饰符标记的声明,所以使用objc属性隐式标记它们.

dynamic objective-c ios swift3

37
推荐指数
3
解决办法
8281
查看次数

KVO vs NSNotification vs protocol/delegates?

虽然我有一些想法可以使用,但确切的用法仍然不清楚.有人能解释一下......?谢谢.

iphone protocols key-value-observing nsnotifications ios

34
推荐指数
2
解决办法
2万
查看次数

如何在iOS上调整类方法?

方法调配对于实例方法非常有用.现在,我需要调整一个类方法.知道怎么做吗?

试过这个,但它不起作用:

void SwizzleClassMethod(Class c, SEL orig, SEL new) {

Method origMethod = class_getClassMethod(c, orig);
Method newMethod = class_getClassMethod(c, new);

if(class_addMethod(c, orig, method_getImplementation(newMethod), method_getTypeEncoding(newMethod)))
    class_replaceMethod(c, new, method_getImplementation(origMethod), method_getTypeEncoding(origMethod));
else
    method_exchangeImplementations(origMethod, newMethod);
}
Run Code Online (Sandbox Code Playgroud)

iphone objective-c swizzling ios

31
推荐指数
1
解决办法
2万
查看次数