ios 小技巧整理 不定时更新

本文汇总了iOS开发中实用技巧,包括静态库合并、NSLog优化、ARC配置、系统调用等,帮助开发者提升开发效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 制作静态库时,真机和模拟器的库文件是不一样的,因此要合并起来。

lipo -create ../Release-iphonesimulator/*.a  ../Release-iphoneos/libPrint.a  -output ../libPrint.a

2. NSlog只在debug状态下打出,在release状态下就无视掉。提高产品的性能。

先介绍几个常用的宏:

  •  __VA_ARGS__ 是一个可变参数的宏,这个可变参数的宏是新的C99规范中新增的,目前似乎只有gcc支持(VC6.0的编译器不支持)。宏前面加上##的作用在于,当可变参数的个数为0时,这里的##起到把前面多余的","去掉,否则会编译出错。
  •  __FILE__ 宏在预编译时会替换成当前的源文件名
  •  __LINE__宏在预编译时会替换成当前的行号
  •  __FUNCTION__宏在预编译时会替换成当前的函数名称
  • __OPTIMIZE__ 是release 默认会加的宏
以下代码最好写在“-Prefix.pch”里面,预编译文件。

#ifndef  __OPTIMIZE__
    #define MyLOG(...)   NSLog(__VA_ARGS__) 
    #define MyPrintBaseLog	NSLog(@"%s(%d)", __FUNCTION__, __LINE__)
    #define MyDebugLog(s, ...)	NSLog(@"%s(%d): %@", __FUNCTION__, __LINE__, [NSString stringWithFormat:(s), ##__VA_ARGS__])
#else
    #define MyLOG(...)
    #define MyPrintBaseLog
    #define MyDebugLog(s, ...)
#endif

更改debug和release状态:

Edit Scheme -> Run project -> Build Configuration

3. ARC的问题

  • 1.在targets->build phases中修改compiler Flags属性,添加:-fobjc-arc,就可以让旧的工程支持arc;
  • 2.在targets->build phases中修改compiler Flags属性,添加:-fno-objc-arc,就可以让原来支持arc的工程不使用arc,对于大部分第三方类库来说都可以顺利编译通过

4. 调用系统的工具

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"tel://10086"]];  
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"sms://10086"]]; 
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"mailto://xxx@apple.com"]];

补充:调用自己的app。

在如下URL Schemes 添加自定义的Scheme。然后就可以在Safari中输入"begin://",启动你的app了。当然后面也可以跟参数,例如:begin://test/path?p=1&q=2....


处理方法是

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url;  // Will be deprecated at some point, please replace with application:openURL:sourceApplication:annotation:
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation NS_AVAILABLE_IOS(4_2); // no equiv. notification. return NO if the application can't open for some reason

保险起见,两个方法最好都重写一下。


5. 延时函数: 

[NSThread sleepForTimeInterval:3];
[self performSelector:@selector(machineBallAction) withObject:nil afterDelay:0];

6.记录程序运行的时间。
clock_t begin = clock();
// do somethingclock_t end = clock();NSLog(@"used time:%f s",(end - begin)/(float)CLOCKS_PER_SEC);

7. 在适配不同版本的系统时,有一些方法在新版本里已经被代替了,但是旧版本又不支持新版本的方法,所以特殊情况下,要对系统版本进行判断,然后分别实现两种不同的方法,这样在xcode里面就会出现如下警告,作为优美代码的coder,当然不想看到折么刺眼的东西。

下面给出一种方法来消除这样的警告。

#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
            //deprecated methods.
#pragma GCC diagnostic pop

同样在“performSelector:withObject”的时候,如果selector是动态变化的,那么也有警告,可以用类似的方法来消除

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Warc-performSelector-leaks"
        [self performSelector:oneSelector withObject:object];
#pragma clang diagnostic pop

8. 快速清空subViews

[self.view.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];

9. trim掉string的空格

aString = [aString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];

10. 添加自定义字体

首先将*.ttf文件添加到工程中,然后在info.plist文件中添加一个key, key的名字是Fonts provided by application,默认是array,然后将添加的字体文件名字写到后面就行了。

在工程用的时候可以直接

[UIFont fontWithName:@"******" size:20.0];
如果名字不知道的话可以遍历一下。

11. NSLOG

NSLog函数支持printf函数所有的格式和控制符号。而且它还可以支持%@来打印一个对象。当使用%@时,给对象发送description消息,description方法返回一个字符串来代替%@。

符号                                          显示

%@                                           id

%d,%D,%i                           long

%u,%U                                   unsigned long

%hi                                           short

%hu                                          unsigned short

%qi                                           long long

%qu                                          unsigned long long

%x,%X                                  16进制打印unsigned long

%o,%O                                  8进制打印 unsigned long

%f,%e,%E,%g,%G        double

%c                                            unsigned char-ASCII 字符

%C                                           unichar-Unicode 字符

%s                                            char* (以空字符结束的ASCII字符组成的字符串)

%S                                           unichar* (以空字符结束的Unicode字符组成的字符串)

%p                                            void* (以0x开头的16进制的地址空间)

%%                                          A%字符


不定时更新



部分内容来源于网上,不能一一列出出处,请恕罪。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值