NSLog和print使用的差异

本文详细介绍了Objective-C中NSLog函数与C语言中printf函数之间的区别。主要从自动换行、输出附加信息、参数类型等方面进行了对比,并给出了具体的使用示例。
       // NSLog和print使用的差异
        // 1. NSLog会自动换行 而printf不会自动换行
        // 2. NSLog会自动输出时间等项目信息,printf不会输出调试信息
        // 3. NSLog函数的参数是一个NSString对象
        // printf是一个字符串常量指针
        
        // OC用%@输出字符串
        // @""  这个符号表示将一个C的字符串转化为OC中的字符串对象NSString
        NSString *str1 = @"张三丰";
        NSLog(@"%@",str1);
        NSLog(@"Hello, World!");

### Objective-C Swift 互相调用的实现方式 Objective-C Swift 是两种可以互相调用的语言,这种互操作性使得开发者能够在同一个项目中同时使用这两种语言。以下是它们互相调用的具体实现方式: #### 1. Swift 调用 Objective-C Swift 调用 Objective-C 的类方法是相对简单的,因为 Xcode 会自动生成一个桥接头文件(Bridging Header),用于将 Objective-C 的代码暴露给 Swift- **步骤**: - 确保 Objective-C 类继承自 `NSObject` 或者其子类。 - 在项目的桥接头文件中导入 Objective-C 的头文件。 -Swift 中可以直接使用这些 Objective-C 类型方法[^1]。 例如,假设有一个 Objective-C 类 `MyObjCClass`,定义如下: ```objc #import <Foundation/Foundation.h> @interface MyObjCClass : NSObject - (void)sayHello; @end ``` 在桥接头文件中导入: ```objc #import "MyObjCClass.h" ``` 然后在 Swift 中可以直接使用: ```swift let objcInstance = MyObjCClass() objcInstance.sayHello() ``` #### 2. Objective-C 调用 Swift Objective-C 调用 Swift 需要确保 Swift方法能够被 Objective-C 访问。这通常通过以下方式实现: - **标记为 `@objc`**:Swift 类或方法需要显式标记为 `@objc`,以便在 Objective-C 中可见。 - **继承自 `NSObject`**:Swift 类必须继承自 `NSObject` 或其子类[^1]。 例如,定义一个 Swift 类: ```swift import UIKit class MySwiftClass: NSObject { @objc public func sayHello() { print("Hello from Swift!") } } ``` 在 Objective-C 中,可以通过导入自动生成的头文件来访问 Swift 类。这个头文件的命名格式通常是 `<模块名>-Swift.h`。例如,如果模块名为 `MyApp`,则头文件为 `MyApp-Swift.h`。 在 Objective-C 中使用: ```objc #import "MyApp-Swift.h" MySwiftClass *swiftInstance = [[MySwiftClass alloc] init]; [swiftInstance sayHello]; ``` #### 3. 方法参数的映射 当从 Objective-C 调用 Swift 方法时,方法名参数可能会被自动映射以符合 Objective-C 的命名规则。例如,Swift 中的 `func test(param: String)` 可能会被映射为 `- (NSString *)testWithParam:(NSString *)param`[^3]。 #### 4. 注意事项 - **性能差异**:由于 Swift 的静态分发机制,其方法调用通常比 Objective-C 的动态分发更高效。因此,在 Objective-C 中调用 Swift 方法时,可能需要额外的运行时开销[^1]。 - **类型兼容性**:Swift Objective-C 的类型系统存在差异,某些 Swift 特定的功能(如泛型、枚举等)可能无法直接在 Objective-C 中使用。 ```swift import Foundation class SwiftTest : NSObject { @objc func test() -> NSString { return "Test from Swift" } } ``` 在 Objective-C 中调用: ```objc #import "MyApp-Swift.h" SwiftTest *swiftTest = [[SwiftTest alloc] init]; NSString *result = [swiftTest test]; NSLog(@"%@", result); ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值