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

当我从Swift调用objective-c函数时,这些函数中的NSLog不执行任何操作

当从Swift调用Objective-C函数时,如果这些函数中的NSLog不执行任何操作,可能有以下几个可能的原因:

  1. 编译器优化:Swift编译器在调用Objective-C函数时可能会进行一些优化,例如删除未使用的代码或者优化日志输出。这可能导致NSLog语句被编译器忽略,从而不执行任何操作。
  2. 日志级别设置:NSLog函数是Objective-C中用于输出日志的函数,它可以根据日志级别来控制输出。如果在Objective-C函数中使用了NSLog,并且日志级别设置为比较高的级别(例如Error或Warning),而Swift代码中的日志级别较低(例如Debug),那么NSLog语句可能不会执行。
  3. 调用顺序问题:在Swift中调用Objective-C函数时,可能存在调用顺序的问题。如果NSLog语句位于Objective-C函数的某个分支或条件语句中,并且这个分支或条件在Swift代码中没有被满足,那么NSLog语句也不会执行。

针对以上可能的原因,可以尝试以下解决方法:

  1. 确保日志级别一致:在Objective-C函数中使用NSLog时,确保日志级别与Swift代码中的日志级别一致,以确保NSLog语句能够执行。
  2. 检查调用顺序:检查Swift代码中调用Objective-C函数的顺序,确保执行到包含NSLog语句的分支或条件。
  3. 使用其他日志输出方式:如果NSLog仍然无法执行,可以考虑使用其他的日志输出方式,例如使用CocoaLumberjack、OSLog等第三方库来输出日志。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云日志服务(CLS):提供全面的日志管理和分析服务,帮助用户实时采集、存储、检索和分析日志数据。详情请参考:https://cloud.tencent.com/product/cls

请注意,以上答案仅供参考,具体解决方法可能需要根据实际情况进行调试和排查。

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

相关·内容

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

消息机制 在之前我们先看下C语言跟OC调用方法差别: 1.C 语言,函数调用在编译时候就会决定调用哪个函数(C语言函数调用),编译完成之后直接顺序执行,无任何二义特性. 2.OC函数调用成为消息发送...,属于动态调用过程,在编译时候并不能决定真正调用哪个函数(其实过程是,在编译阶段,OC可以调用任何函数,即使这个函数并未实现呢,只要申明过就不会报错,而C语言在编译阶段就会报错),只有在真正运行时候才会根据函数名称找到对应函数调用...返回就是这个Class类名, 调用[super method];就是子类去调用父类这个方法(注意是子类调用, 而不是父类, 只是从父类取得方法地址而已) 这部分可能有些人会有一点疑惑, 我们讲下...(也可以还带有参数), 对象接收到消息后会先在cache找之前调用记录, 在调用记录中找到了该方法就直接运行, 找不到就去方法列表去找 还找不到就去父类去找 如果找到顶层还是没有, 一般情况下在我们没有进行任何操作时候会...crash 如果要对没有实现方法调用做一些操作, 就可以在动态解析/重定向/消息转发来做处理, 在其中任何一个阶段有处理该方法调用就不会crash 更详细用法之前讲过, 请看: http://www.cnblogs.com

1.2K31

汇编寄存器规则

“在 x64 调用函数,寄存器方式和使用遵循非常特定规则。这决定了函数参数应该去哪里以及函数完成函数返回值应该在哪里。...但是,一旦函数序言(准备堆栈和寄存器函数开始部分)完成执行这些寄存器值就可能改变。生成程序集可能会覆盖存储在这些寄存器值,或者在代码不再需要这些引用时丢弃这些引用。...当 Objective-C 执行方法,将执行一个名为 objc_msgSend 特殊 C 函数这些功能实际上有几种不同类型,但稍后会介绍更多。...这意味着您不会看到这些寄存器值有太多更改,因为在调用获取寄存器值函数它们可能具有相同(或相似)值。...和寄存器 在 Swift 探索寄存器,您将遇到两个问题,这使汇编调试比 Objective-C 困难。

2.4K50

超实用ios面试技巧,90%的人都不知道……

任何一个Cocoa程序线程,都可以通过以下代码来获取到当前贤臣runloop。...●举例说明Swift里边有哪些是Objective-C没有的?...Swift引入了在Objective-C没有的一些高级数据类型,例如tuples(元祖),可以使你创建和传递一组数值。...Optionals类似于Objective-C中指向nil指针、但是适用于所有的数据类型,而非仅仅局限于类,Optionals相比于Objective-Cnil指针更加安全简明,并且也是Swift诸多最大功能核心...当一个对象调用setValue方法,方法内部会做以下操作: ①检查是否存在相应keyset方法,如果存在,就调用set方法 ②如果set方法不存在,就会查找与key相同名称并且带下划线成员属性,如果有

78870

iOS工程师必看 20 道 面试题

原因是,所有UI相关操作应该在主线程进行。当我们可以在一个后台线程中等待4秒,但是一定要在主线程更新alertLabel。...通过Swiftlet设置,使得这些数据达到了真正意义上“不变”,它也从根本上解决了多线程内存访问和操作顺序问题。 设计成值类型还可以提升API灵活度。...在SwiftObjective-C混编项目中,如何在Swift文件调用Objective-C文件已经定义方法?如何在Objective-C文件调用Swift文件定义方法?...Objective-C若要调用Swift代码,可以导入Swift生成函数ProjectName-Swift.h来实现。...Swift,协议扩展(protocol extension)可以定义部分方法默认实现,这样这些方法在实际调用中就是可选实现了。

3.6K40

Swift解读专题一——Swift2.2语言预览

Java不同参函数采用重载方式,这样效果是,相同函数名,参入不同参数则会执行不同操作,是不同两个方法,这样有点是使代码十分简洁,然而对开发者来说并不友好,开发者在开发不能便捷看出每个参数意义和用法...个人见解,Swift函数设计综合了上面两种语言有事,参数列表与函数名分离,简化了函数,同时,参数列表中保留了每个参数名称,使开发者在调用函数更加直观。         ...在Objective-C,如果需要某个函数返回一组值,开发者通常会需要使用字典或者数组,这样做有一个问题,在调用函数,返回值意义十分模糊,开发者需要明确知道其中数据顺序与意义。...在Swift同样也有set和get方法,只是这里set和get方法与Objective-Cset和get方法有很大不同,Objective-Cget和set方法是截获了属性和存取过程,在其中加入额外其他操作...枚举和C与Objective-C有很大差别,在Swift,枚举也被作为一种数据类型来处理,其中可以添加函数方法。

2K20

iOS&mac OShook框架梳理

Objective-C函数hook 原理:MSHookMessageEx对于ObjC函数采用也是method swizzle方法,主要是Objetive-Cruntime机制,可以在ObjC方法动态采用...;第二个参数message为要HookObjective-C函数message;第三个参数hook为hook后新对应该message执行逻辑,即替换后函数地址;第四个参数old为对应该message...函数地址,若无需调用函数则该参数可以设为NULL。...;第二个参数为Hook后要替换函数地址;第三个参数为指向Hook地址指针,用来保存被Hook函数替换掉汇编指令方便执行完自己代码逻辑后能够继续执行函数逻辑,若不需要调用函数,则此处可以设为...由于是基于runtime,所以C/C++方法是生效,仅针对Objective-C方法有效,swift不是基于OC对象也不会生效。

5.9K2516

Objective-C Runtime:深入理解类与对象

如果再以[[NSDictionary alloc] init]这种方式来创建数组,则会直接cache取出相应方法,直接调用。...当我们向一个类实例发送消息,Runtime会根据实例对象isa找到这个实例对象所属类,然后再在这个类方法列表和其父类方法列表查找与消息相对应selector指向方法,进而执行目标方法。...函数:销毁一个类实例,但不会释放并移除任何与其相关引用; 实例操作函数 实例操作函数主要是针对我们创建实例对象一系列操作函数。...我们不能假设函数获取类对象是继承自NSObject体系,所以在这些类上调用方法是,都应该先检测一下这个方法是否在这个类实现。...小结 本文着重讲解了在Runtime类与对象相关方法和数据结构,通过这些讲解可以让大家对Objective-C底层类与对象实现有大致了解,并且可以为大家平常编程过程提供一些思路上启发。

1.2K40

Swift编程小技巧

1、for in 循环中可选值解包 当使用for in循环一个包含可选值数组,我们可能会使用if let 或guard解包: let animals = ["dog", nil, "pig",...4、Defer保证代码块在控制流退出前被调用 defer 所声明代码块会在当前代码执行退出后被调用: func test(code: Int) { defer { print(...也可以实现类似的功能,可以参考:Objective-C实现Swiftdefer 5、布尔值取反 在任何编程语言中,布尔值都是最常用和最简单数据类型之一。...isSelect } 这种写法应该人多一些,也不容易出错一些,但是我觉得下面的更好: if isSelect { isSelect.toggle() } toggle()是一个swift提供函数,..., NSUInteger idx, BOOL * _Nonnull stop) { NSLog(@"%d -- %@", idx, obj); }]; 8、静态工厂方法 在Swift使用静态工厂方法和属性来执行对象设置可能是一种将设置代码与实际逻辑清晰分开好方法

93311

defer in C++Objc

导语 写过swift同学应该都知道defer这个关键字,可以让我们在函数return之前执行指定代码,这对于有多个提前return而忘记释放资源函数来说,简直不要太方便了,然而对于swift前辈...defer范围 虽然我们总是拿defer来帮函数做资源回收工作,但其实defer作用范围是最近作用域,假如我们将defer放入if作用域中,defer就会在if作用域结束前执行,而非函数return...,造成类型匹配 static void stringCleanUp(__strong NSString **string) { NSLog(@"%@", *string); } // 在某个方法...自动调用stringCleanUp 借助cleanup这个黑魔法,假如我们定义一个接受一个block指针参数函数,其函数体就是直接执行该block参数,然后将该函数传给cleanup指令,那么就可以在作用域结束前执行指定代码...究其原因,就是因为return语句并不是原子语句,在test函数return执行顺序是确定返回值result = 1 -> 执行@onExit -> 函数返回,因此即使@onExit修改了返回值

99020

2020-iOS最新面试题解析—1(原理篇)

NSNotificationCenter 首先必须明确通知在哪个线程中发出,那么处理接受到通知方法也在这个线程调用 如果在异步线程发通知,那么可以执行比较耗时操作; 如果在主线程发通知,那么就不可以执行比较耗时操作...而 super 本质是一个编译器标示符,和 self 是指向同一个消息接受者 * 当使用 self 调用方法,会当前类方法列表开始找,如果没有,就从父类再找; * 而当使用 super...当我们发送一个消息给一个NSObject对象,这条消息会在对象类对象方法列表里查找 当我们发送一个消息给一个类,这条消息会在类Meta Class对象方法列表里查找 objc类方法和实例方法有什么本质区别和联系...,这些操作都可以使用runtime对应方法实现。...如果向一个nil对象发送消息,首先在寻找对象isa指针就是0地址返回了,所以不会出现任何错误 objc向一个对象发送消息obj foo和objc_msgSend()函数之间有什么关系?

1.6K21

iOS 面试策略之语言工具-Objective-C

本章将探讨 Objective-C 基本语言特性,其动态特性将与 Swift 比较设计。 Objective-C 面试理论题 1.什么是 ARC?...它是根据对象引用计数来判断当前对象生命周期:当有一个新指针指向这个对象,我们将其引用计数加 1,当某个指针不再指向这个对象,我们将其引用计数减 1,当对象引用计数变为 0 ,说明这个对象不再被任何指针指向了...因为要保证操作完成,所以速度慢。它比 nonatomic 安全,但也并不是绝对线程安全,例如多个线程同时调用 set 和 get 就会导致获得对象值不一样。...同时枚举每个类型前应加上 enum 名称,这样方便混编直接在 Swift 调用。 UIImage 不应该出现在 Customer 。...原因是,所有 UI 相关操作应该在主线程进行。当我们可以在一个后台线程中等待 4 秒,但是一定要在主线程更新 alertLabel。

65720

美团客户端响应式框架 EasyReact 开源啦

一旦其它框架在 Hook 过程与之形成冲突,后续问题排查就变得十分困难。 调试困难性 函数响应式编程使用高阶函数,还带来了另外一个问题,那就是大量嵌套闭包函数导致调用栈深度问题。...而 Objective-C 是一门古老编程语言,在 2014 年苹果公司推出 Swift 编程语言之后,Objective-C 已经基本不再更新,而 Swift支持 Tuple 类型和集合类型自带...在 EasyReact Objective-C 版本开发,我们还衍生了一些周边库以支持这些代码技巧和语法糖。这些周边库现已开源,并且可以独立于 EasyReact 使用。...EasyTuple 使用宏构造出类似 Swift Tuple 语法。使用 Tuple ,在需要传递一个简单数据架构,可以不必手动为其创建对应类,轻松交给框架解决。...在使用 EasyReact ,我们通常会把这些属性包装为 EZRNode 并加上一个泛型。

1K10

·FMDB:第三方本地数据库处理框架(官方文档翻译篇)

你无需调用 [FMResultSet close]来关闭结果集, 当新结果集产生,或者其数据库关闭,会自动关闭。...这些执行方法全部接受数量可变参数(或这些参数一个代表,例如NSArray,NSDictionary或va_list)。 并且,在Objective-C中将该SQL占位符?...NSNull()]) } catch { print("error = \(error)") } 注意:在Swift,您不必像Objective-C那样包装基本数字类型。...一个Swift字符串插入也不应该将值插入到SQL。使用?占位符将值插入到数据库(或WHERE在SELECT语句中子句中使用)。...FMDatabaseQueue将运行(序列化队列上)块(因此是类名)。所以如果你同时多个线程调用FMDatabaseQueue方法,它们将按照它们被接收顺序执行

1.2K20

ReactiveCocoa 基础

(@"%d", result); 函数式编程思想 函数式编程思想:是把操作尽量写成一系列嵌套函数或者方法调用。...特点:每个方法必须有返回值(本身对象),把函数或者Block当做参数,block参数(需要操作值)block返回值(操作结果) 代表:ReactiveCocoa 实现:用函数式编程实现,写一个加法计算器...以后使用RAC解决问题,就不需要考虑调用顺序,直接考虑结果,把每一次操作都写成一系列嵌套方法,使代码高聚合,方便管理。...导入ReactiveCocoa ReactiveCocoaGitHub地址 Objective-C ReactiveCocoa 2.5版本以后改用了Swift,所以Objective-C项目需要导入2.5...用于当一个信号,被多次订阅,为了保证创建信号,避免多次调用创建信号block,造成副作用,可以使用这个类处理。

71110

Objective-C Runtime详解

还记得引言中举例子吧,消息执行会使用到一些编译器为实现动态语言特性而创建数据结构和函数,Objc类、方法和协议等在 runtime 中都由一些数据结构来定义,这些内容在后面会讲到。...SEL objc_msgSend函数第二个参数类型为SEL,它是selector在Objc表示类型(Swift是Selector类)。...记住,当一个消息发送给任何一个对象, 方法检查 对象 isa 指针开始,然后是父类。实例方法在类定义, 类方法 在元类和根类定义。(根类元类就是根类自己)。...它们是在代码被编译被插入实现。尽管这些参数没有被明确声明,在源代码我们仍然可以引用它们。...dispatch_once 是GCD一次性方法,它保证了代码块只执行一次,并让其为一个原子操作,线程安全是很重要

1.7K60

iOS内存管理

当我们创建一个新对象并持有它时候,它引用计数为 1,当有一个新指针指向这个对象,我们将其引用计数加 1,当某个指针不再指向这个对象是,我们将其引用计数减 1,当对象引用计数变为 0 ,说明这个对象不再被任何指针指向了...由于引用计数简单有效,除了 Objective-CSwift 语言外,微软 COM(Component Object Model )、C++11(C++11 提供了基于引用计数智能指针 share_prt...在 Linux 文件系统,我们用 ln 命令可以创建一个硬链接(相当于我们这里 retain),当删除一个文件(相当于我们这里 release),系统调用会检查文件 link count 值,...直到最后一次删除前,系统发现 link count 值为 1,则系统才会执行直正删除操作,把文件所占用磁盘区域标记成未用。...不将这个值 1 变成 0,可以减少一次内存操作,加速对象回收。

95080

(译)Objective-C 类属性

翻译自:Objective-C Class Properties 译者:Haley_Wong 由于Swift 3.0 出了太多令人兴奋新特性,人们很容易忽略 Objective-C小改动。...苹果展示Objective-C 很可能是为了提高Swift操作性(译者注:互操作性主要是指OC代码与Swift代码相互转换),但是仍然很欢迎开发者用Objective-C来完成工作。...在这篇文章,我们就来看看Objective-C中新添加类属性。...They are never synthesized. (23891898) 翻译如下: Objective-C 现在支持类属性了,与OC 类属性对应Swift类型属性。...生成Swift接口 似乎,Objective-C 最近这些改进只是为了提高与Swift操作性。Objective-C中新添加类型属性对应Swift类变量用法。

1.6K30
领券