- 浏览: 257281 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (174)
- android (5)
- android代码片段 (10)
- ios (102)
- 程序员 (5)
- 人生 (1)
- UITextField (2)
- UINavigationController (2)
- iPhone开发 (87)
- cocos2d (8)
- Object-c (1)
- Xcode4 (4)
- Mac (1)
- ASIHTTPRequest (1)
- UITableView (9)
- UIImageView (2)
- CATransition (1)
- CCMenu (1)
- UIView (2)
- UIScrollView (1)
- NSString (1)
- Git (2)
- UISwitch (1)
- UIImage (1)
- 拉伸 (1)
- delegate (1)
- NSTimer (1)
- Crash (1)
- Log (1)
- TabBar (1)
- UITabBarController (1)
- UITextView (1)
- iPad (1)
- app (1)
- test (1)
- 数据库 (1)
最新评论
-
cccoooccooco:
测了下,效率很高啊。谢谢分享。
字符串替换算法【java】 -
zkai309:
你好,
我们是ios手游《富豪传奇》的开发商,你开发的糗事囧 ...
如何判断自己是否到了该辞职的时候 -
xyxdasnjss:
吃饱了就饿 写道以后会用到
设备判断 iphone3? iphone4? iphone5? -
吃饱了就饿:
以后会用到
设备判断 iphone3? iphone4? iphone5? -
xyxdasnjss:
zhihaoshi 写道ios 5.0 中用什么方法判断 iO ...
ios 判断设备的GPS功能是否开启
转自:http://blog.csdn.net/NickTang/article/details/6264713#
NSLog的定义
NSLog定义在NSObjCRuntime.h中,如下所示:
void NSLog(NSString *format, …);
基本上,NSLog很像printf,同样会在console中输出显示结果。不同的是,传递进去的格式化字符是NSString的对象,而不是chat *这种字符串指针。
示例
NSLog可以如下面的方法使用:
NSLog (@"this is a test");
NSLog (@"string is :%@", string);
NSLog (@"x=%d, y=%d", 10, 20);
但是下面的写法是不行的:
int i = 12345;
NSLog( @"%@", i );
原因是, %@需要显示对象,而int i明显不是一个对象,要想正确显示,要写成:
int i = 12345;
NSLog( @"%d", i );
输出:
2009-03-23 11:01:32.936 DebugLog[12085:807] Hello, World!
上面的信息依次为时间,进程名称,进程ID,线程ID,Log的内容。
格式
NSLog的格式如下所示:
- %@ 对象
- %d, %i 整数
- %u 无符整形
- %f 浮点/双字
- %x, %X 二进制整数
- %o 八进制整数
- %zu size_t
- %p 指针
- %e 浮点/双字 (科学计算)
- %g 浮点/双字
- %s C 字符串
- %.*s Pascal字符串
- %c 字符
- %C unichar
- %lld 64位长整数(long long)
- %llu 无符64位长整数
- %Lf 64位双字
- %.2f 保留两位小数
使用NSLog的一个风险是:它的运行会占用时间和设备资源。当我们用Simulator时,NSLog的资源占用并不引人注意,风险也不会显示出来。但是如果你写的是一个即时战略游戏,而你在每一个action中都加入了NSLog——那么NSLog将成为一个魔鬼。灾难的具体表现常常是:你在Simulator中运行游戏畅通无阻,但到了真机上,会发现很“卡”,不论是拖动一个单位还是缩放一个场景,FPS也降到了各位数。
简单而粗暴的解决方案是:在一个游戏release前,将所有的NSLog注释掉。简单有效,但副作用是:下次你要调试时,又得将NSLog一个个取消注释。
我找到了一个最为有效的解决方案:你以release模式编译的程序不会用NSLog输出,而你以debug模式编译的程序将执行NSLog的全部功能。
#ifndef __OPTIMIZE__ #define NSLog(...) NSLog(__VA_ARGS__) #else #define NSLog(...) {} #endif
这个代码的魔术在于:release模式通常会定义 __OPTIMIZE__,当然debug模式不会。将这段代码放在你的头文件当中,你就可以放心的使用NSLog了!
==================================================================
转自:http://blog.csdn.net/sing_sing/article/details/6679207
今天突然看到一篇文章,介绍了NSLog的使用。NSLog其实不是简单的输出调试信息,还会做一些其他工作,这样在设备上运行的时候会降低效率。
所以优化NSLog就变得非常有必要了。在debug下显示log,在release下自动屏蔽log输出的代码。花了点时间,将网上的两种NSLog优化的方法综合了一下。
具体如下:
一、新建一个.h文件,命名为DLog.h。
DLog.h文件内容为:
//添加定义,在release时不会输出log
#ifndef __OPTIMIZE__
#define NSLog(...) NSLog(__VA_ARGS__)
#else
#define NSLog(...) {}
#endif
#ifndef __OPTIMIZE__
#define DLog(...) NSLog(__VA_ARGS__)
#else
#define DLog(...) /* */
#endif
#define ALog(...) NSLog(__VA_ARGS__)
二、添加到工程。
在appName-Prefix.pch中添加DLog.h头文件。
添加后如下所示:
#import <Availability.h>
#ifndef __IPHONE_3_0
#warning "This project uses features only available in iPhone SDK 3.0 and later."
#endif
#ifdef __OBJC__
#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
#import "DLog.h"
#endif
通过这样定义,既可以用DLog,ALog,也可以使用系统自带的NSLog。
这样就可以在既高效又灵活的使用NSLog了。
参考文章如下:
http://www.cimgf.com/2009/01/24/dropping-nslog-in-release-builds/
发表评论
-
iOS 关闭键盘 3种方式
2015-12-11 14:21 8341,明确知道 当前的UITextField,或者UITextV ... -
在webapp中判断native app是否安装并直接打开
2015-08-31 18:15 881http://www.baidufe.com/item/cc5 ... -
iOS之ARC下的Block
2015-04-15 14:37 644http://www.cnblogs.com/tekkama ... -
UITableView 隐藏多余的Cell的分割线
2015-02-02 14:39 1598- (void)setExtraCellLineHidden ... -
UILabel顶端对齐
2014-09-10 10:15 767http://shfzhzhr.iteye.com/blog ... -
iOS7滑动返回
2014-06-24 11:48 961http://blog.csdn.net/wmqi10/ar ... -
UIView (Additon)
2014-06-19 22:23 818#import <UIKit/UIKit.h> ... -
UIColor (XYCategory)
2014-06-19 22:13 543#import <UIKit/UIKit.h> ... -
OC MD5
2014-06-19 21:50 823#import <Foundation/Foundat ... -
IOS判断设备是否已越狱(isJailbroken)
2014-06-03 21:17 742@interface UIDevice (Helper) ... -
iOS6 Xcode5 去掉Icon高亮
2014-05-25 11:13 0我昨天刚遇到这个问题,已经解决。请按照下图红色矩形所圈处的信 ... -
iOS使用NSClassFromString
2014-03-07 11:24 968http://www.cocoachina.com/b/?p ... -
iOS7 开发相关
2013-10-22 10:17 12581.UITableView reloadData 之 ... -
iPad横版开发时,宽高是反的
2013-08-14 18:01 1115最近刚开始做iPad版应用,但发现横版的时候宽高是反的,很别 ... -
UITextView 带有PlaceHolder
2013-07-31 13:23 1495#import <UIKit/UIKit.h> ... -
UITableView 只更新某行
2013-07-22 10:10 1057如果全部更新的话 用reloadData方法 如果 ... -
Xcode 4.4中LLVM compiler 4.0带来的Objective-C新语法特性
2013-07-15 10:56 944http://blog.csdn.net/totogo201 ... -
new 与 alloc/init的区别
2013-07-11 14:47 763http://blog.csdn.net/abby_shee ... -
自定义UITableViewCell上的delete按钮
2013-06-28 10:35 1107//通过UITableViewDelegate方法可以实现删 ... -
判断是否是 emoji表情
2013-06-28 09:42 2401+ (BOOL)stringContainsEmoji:(N ...
相关推荐
iOS中控制NSLog输出时机详解 本文将围绕iOS开发中NSLog输出时机的相关内容...本文给大家介绍了iOS开发中关于NSLog输出时机的相关内容,并提供了一些实用的技巧和方法来控制NSLog的输出。希望本文能够对大家有所帮助。
本篇笔记将详细介绍`NSLog`的使用和其在iPhone应用开发中的作用。 `NSLog`是Foundation框架的一部分,用于向控制台输出文本信息。它在Objective-C和Cocoa Touch环境中扮演着类似Java中`System.out.println`的角色,...
iOS 中的定时器使用教程是 iOS 开发者们不可或缺的一部分,本文将详细介绍 iOS 中最全的各种定时器的使用教程,使得开发者们更好地理解和使用定时器。 NSTimer 是 iOS 中最基本的定时器,它可以根据设置的时间间隔...
接下来,我们将详细介绍AFNetworking的使用方法。 1. 创建AFHTTPRequestOperationManager对象:这是AFNetworking的核心类,用于发起HTTP请求。可以通过`[AFHTTPRequestOperationManager manager]`创建一个实例。 2...
以上是 AFNetworking 2.5 版本的基本用法和关键功能介绍。这个库提供了强大的网络请求处理能力,极大地简化了 iOS 和 macOS 开发中的网络编程工作。在实际项目中,你可以根据需要进行更深入的定制和扩展。
本文将详细介绍如何使用ZipArchive进行文件的压缩和解压缩。 ### 1. ZipArchive简介 ZipArchive是一个Objective-C类库,专门用于处理ZIP档案。它支持创建新的ZIP文件、添加文件到已有的ZIP文件以及从ZIP文件中提取...
本文将详细介绍如何在iOS项目中引入并使用自定义字体。首先,我们从标题“iOS使用自定义字体demo”中理解,这是一个关于在iOS应用程序中集成和使用非标准字体的示例。接下来,我们将通过描述中的链接(尽管实际链接...
这只是一个基础的介绍,实际开发中可能需要处理更多复杂情况,如数据同步、并发访问控制等。对于更高效和安全的数据库操作,建议使用ORM(对象关系映射)框架,如Core Data,它能提供更高级别的抽象和管理。
- **背景介绍:** `NSLog()`函数是Objective-C中常用的调试工具之一,用于将消息输出到Xcode的控制台。 - **知识点解释:** `NSLog()`函数可以用来输出各种类型的数据,包括字符串、数字等。对于字符串的输出,可以...
Objective-C 中的变量必须先声明后使用。 #import int main(int argc, const char * argv[]) { @autoreleasepool { int myInt = 10; // 声明整型变量 float myFloat = 10.0f; // 声明浮点型变量 NSString *...
以下是关于这些类的详细介绍: 1. **NSArray** 和 **NSMutableArray**: - NSArray 是一个不可变的数组,一旦创建,就不能添加、删除或修改其中的元素。数组中的每个元素都有一个唯一的索引,从0开始。 - ...
这篇博客文章主要介绍了如何在iOS应用中集成和使用Reachability库。 Reachability库的核心功能是监控网络状态,它提供了三种基本的网络状态: 1. **Not Reachable**: 设备无法连接到任何网络。 2. **Reachable ...
本篇将详细介绍如何使用 FMDB 在 iOS 应用中实现数据库的增删改查,并通过单例模式来高效管理数据库操作。 首先,我们需要了解 FMDB 的基本概念。FMDB 是基于 SQLite 的,因此它支持 SQL 语句执行,包括 SELECT、...
本文将详细介绍iOS开发中如何使用sqlite3,包括sqlite3的基本概念、安装和配置、数据库操作等方面。 一、SQLite简介 SQLite是一种自包含、无服务器、零配置、支持事务的SQL数据库引擎。它是ACID兼容的,能够提供...
本文将介绍一种实时查看iOS模拟器日志的方法,该方法通过将日志重定向输出到文件中,并使用命令行工具如tail和grep等进行实时过滤查看。 首先,介绍日志重定向的基本思路。在iOS应用开发中,通常使用NSLog函数输出...
通常我们会使用`NSURLSession`或第三方库如AFNetworking,它们都支持使用Block来处理请求的完成或失败: ```objc [[NSURLSession sharedSession] dataTaskWithURL:url completionHandler:^(NSData * _Nullable data...
本节将详细介绍如何在OC中开发弹出提示框。 1. UIAlertController: UIAlertController是iOS 8及更高版本中的主要弹窗组件,它取代了以前的UIAlertView和UIActionSheet。UIAlertController可以创建带有多个按钮和...
本篇文章将详细介绍如何在iOS项目中使用ZXingObjC进行二维码和条形码的扫描,并通过CocoaPods进行库的管理和集成。 首先,让我们了解ZXingObjC。ZXing,又名Zebra Crossing,是一个跨平台的开源项目,提供多种格式...
本篇将详细介绍如何在iOS项目中使用FMDB进行数据库的创建、查询、插入、更新和删除等操作。 ### 1. FMDB简介 FMDB是由GitHub上的开源项目,它实现了SQLite的主要功能,并且与Objective-C语言特性完美结合。FMDB的...