iOS:在objective-c 使用可变参数

本文介绍了在Objective-C中如何使用可变参数,包括NS_FORMAT_FUNCTION的含义和使用,以及函数调用中的注意事项。文章提到,可变参数通常以(id)object1, ... 形式出现,object1通常是NSString类型。在调用时,是否需要添加nil取决于方法实现,如果方法内部通过nil判断结束,调用时必须加nil。同时,文章提到了一些宏定义用于编译时的代码验证。" 110946702,7483123,Win10 WSL2 Docker镜像文件迁移步骤,"['docker', 'ubuntu', 'windows 10']
摘要由CSDN通过智能技术生成
          objective-c中已有的一些可变参数方法:
FOUNDATION_EXPORT  void NSLog(NSString *format, ...) NS_FORMAT_FUNCTION(1,2);
- (instancetype)initWithFormat:(NSString *)format, ... NS_FORMAT_FUNCTION(1,2);
+ (instancetype)arrayWithObjects:(id)firstObj, ... NS_REQUIRES_NIL_TERMINATION; // 注意区别

          在c/c++中使用可变参数参考《C/C++ 使用可变参数 & 原理》,在objective-c中使用情况也差不多,一些宏定义说明如下:

----------------------------------------------------------------------------------------------------------------------------------

       NS_FORMAT_FUNCTION(1,2)的意思:

// NSObjCRuntime.h
#if !defined(NS_FORMAT_FUNCTION)
    #if (__GNUC__*10+__GNUC_MINOR__ >= 42) && (TARGET_OS_MAC || TARGET_OS_EMBEDDED)
	#define NS_FORMAT_FUNCTION(F,A) __attribute__((format(__NSString__, F, A)))
    #else
	#define NS_FORMAT_FUNCTION(F,A)
    #endif
#endif

           __attribute__,是GNU编译器的一个特性,这个宏是一个编译器指令,我们在代码中通过定义这个东西,可以inform编译器我们代码 的一些逻辑,从而在编译器避免一些错误,在运行期提高性能。__attribute__在很多代码中都有应用,非常实用。

          __attribute__ format ,这个东西能告知编译器,我们的代码在处理printf,scanf这样变参数的函数的时候,哪个参数是format string,哪个参数是参数列表,这样可以避免代码中的一些问题,比如:

/* like printf() bu
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值