- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
在 Objective-C 中,可以使用 _cmd
作为 objc_getAssociatedObject
的键,如 NSHipster article 中所述.在 Swift 中,只有 __FUNCTION__
的作用与 _cmd
相似。但我不确定这样做是否安全。
最佳答案
objc_getAssociatedObject()
需要一个唯一指针 作为键。在 Objective-C 中,_cmd
的类型是 SEL
,它是一个指针,并且是根据引用文章是独一无二的。
在 Swift 中,__FUNCTION__
的类型是 String
,它不是指针。当传递给需要指针的函数时,字符串是已转换(可能转换为 NSString
,如 Swift, Strings and Memory Addresses 中所示)。不能保证这转换在每次调用中产生相同的指针。这是一个简单的在 Playground 中演示问题的示例:
func bar(ptr : UnsafePointer<Void>) {
print(ptr)
}
func foo() {
bar(__FUNCTION__)
bar(__FUNCTION__)
}
foo()
输出:
0x00007f8173c06500
0x00007f8173e00020
如您所见,相同的 __FUNCTION__
被传递为两个不同的指向 bar()
函数的指针。
似乎在编译的项目中你会得到相同的指针每次通话,但据我所知,这是没有记录的,因为它在 Playground 中不起作用,我不会依赖它。
因此,我认为使用 __FUNCTION__
作为不安全关联对象的键。
一种安全的方法是使用全局属性的地址如 Is there a way to set associated objects in Swift? .
关于swift - 可以使用 `__FUNCTION__` 作为 `objc_getAssociatedObject` 的 key 吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33803370/
使用: #define DEBUG_FOO(foo) fprintf(stderr, "foo is %x, currently in %s\n", foo, __FUNCTION__); 将打印:
我正在尝试添加一个编译局部变量的 c 宏它被初始化为函数名.. 例如。 void foo (void) { stubmacro; } void bar (void) { stubmacr
__FUNCTION__ 不是字符串文字吗?我一直认为它是 - 沿着 __FILE__ 的路线,但我刚刚发现我不能将字符串文字相邻地连接到它。如果它不是字符串文字,它被定义为什么?我无法让 cscop
如果我问的是一个明显的问题,请原谅我,但是在经历了一堆线程并尝试了一些东西之后,我无法确定这个简单的事情。 我有这个小程序: #define FUNC_PREFIX __FUNCTION__ "()
是否有像 __FUNCTION__ 或 __func__ 这样的编译时常量,其中还包括类方法的类名? 例如,对于 Bar 类中名为 foo 的方法,它不应扩展为 foo,而应扩展为 Bar::foo.
Simlar question with LINE 但是当我用 __FUNCTION__ 替换 __LINE__ 时。宏连接字符串文字“__FUNCTION__”而不是实际的函数名称。 最佳答案 __
Simlar question with LINE 但是当我用 __FUNCTION__ 替换 __LINE__ 时。宏连接字符串文字“__FUNCTION__”而不是实际的函数名称。 最佳答案 __
示例: @noreturn func setOnlyPropertyGetterError(__function__: String) { fatalError("\(__function__)
我定义了一个宏如下: #define ADD_TIME_ENTRY(_name_) m_pTimeMeasurement->addTimeEntry(_name_); 现在,我想通过 ADD_TI
我有一个带有 Windows 运行时组件项目的 Windows Phone 8 解决方案。在 WinRT 代码中,我想使用 __FUNCTION__ 从 C++ 类进行日志记录。但是,__FUNCTI
我有一个 C++ 库,它通过 crtdefs.h 使用预定义的宏 __FUNCTION__。宏已记录 here .这是我的用法: 我的.cpp #include ... void f() {
我发现以下代码可以将日志添加到系统日志中。但是,如果我还想将 __FUNCTION__ 信息添加到系统日志,该怎么做? openlog(basename(argv[0]), LOG_CONS | LO
使用 avr-gcc 可以将数据存储在程序内存中以节省 RAM。这是使用 PROGMEM attribute 完成的. AVR-libc 还提供了一个宏,PSTR() ,可用于文字字符串。 现在我正在
谁能告诉我什么时候 g++ 将 __FUNCTION__“宏”替换为包含函数名称的字符串?似乎在检查源代码的语法正确性之前它不能替换它,即以下将不起作用 #include #define DBG_W
我知道这两者之间的区别,我已经查看了手册。 我还是有些困惑。我可以在类的方法中使用 __FUNCTION__,这代表这个方法的名称。当我回应它时,它只输出名称。这里很清楚。 但为什么我可以在非 cal
有没有人对 C# 版本的 C++ __FUNCTION__ 宏有好的解决方案?编译器似乎不喜欢它。 最佳答案 尝试改用它。 System.Reflection.MethodBase.GetCurren
这应该是微不足道的,但我似乎无法弄清楚如何将 __FUNCTION__ 与字符串连接起来,尤其是在 GCC 上——尽管它适用于 VC++(我正在将一些代码移植到 Linux) #include #i
对于 gcc 项目,__FUNCTION__、__FILE__ 和 __func__ 返回的指针是否保证指向持久内存? (也就是说,我可以安全地引用另一个函数范围内的指针吗?)我知道 __func__
有什么方法可以打印__FUNCTION__作为 linux 上的宽字符? WIDEN 的技巧对我不起作用,gcc 编译器打印: 错误:?L_FUNCTION_?在这方面没有申明 有什么帮助吗? 谢谢
我尝试编写一个宽版本的__FUNCTION__ 来支持可移植代码(Windows 和Linux) #include #include #include typedef wchar_t WCHAR
我是一名优秀的程序员,十分优秀!