在Xcode中我们经常会有一些公用的模式,这些模式在所有的工程中基本上都可以通用。在某种程度上提高了我们的工作效率。
1.Release时禁用NSLog语句,NSLog是我们经常用到的调试语句,在debug时我们会频繁的使用NSLog语句来帮助我们的调试,但是当我们发布版本时,发现程序中的NSlog语句很多,不可能全部都一一注释掉,在release版本时我们使用过多的NSLog会影响程序的性能。所以我们需要在release时禁用NSLog语句,在debug时开启NSLog语句。在我们创建一个工程时系统会自动创建一个宏DEBUG标志。
我们可以在程序使用这个宏来判断当前工程的版本。所以我们会通常在预编译文件.pch中加入代码来进行判断。
#if DEBUG
#define NSLog(...) NSLog(__VA_ARGS__)
#else
#define NSLog(...)
#endif
#define SYNTHESIZE_SINGLETON_FOR_CLASS(classname) \
\
static classname *shared##classname = nil; \
\
+ (classname *)shared##classname \
{ \
@synchronized(self) \
{ \
if (shared##classname == nil) \
{ \
shared##classname = [[self alloc] init]; \
} \
} \
\
return shared##classname; \
} \
\
+ (id)allocWithZone:(NSZone *)zone \
{ \
@synchronized(self) \
{ \
if (shared##classname == nil) \
{ \
shared##classname = [super allocWithZone:zone]; \
return shared##classname; \
} \
} \
\
return nil; \
} \
\
- (id)copyWithZone:(NSZone *)zone \
{ \
return self; \
} \
\
- (id)retain \
{ \
return self; \
} \
\
- (NSUInteger)retainCount \
{ \
return NSUIntegerMax; \
} \
\
- (void)release \
{ \
} \
\
- (id)autorelease \
{ \
return self; \
}
4.编译出现某个头文件找不到,我们需要到header search path看看我们的search path是否正确。
5.如果我们引用的外部文件不支持ARC或者引用的文件版本过老不支持ARC,这就需要ARC和非ARC混编,我们需要到build phrase栏目下面将我们不进行ARC的源文件进行设置。
6.如果我们一个工程需要有多个分发的版本,我们一般会在原有的TARGETS的基础上再复制(Duplicate)一份。我们就不可以选择不同target进行编译分发。
7.为了便于发布的版本的crash的bug的跟踪,我们可以在应用中记录日志,来跟踪记录异常日志。或者应用的crash都有系统记录的crash报告,但是报告中的内容都是一些十六进制的地址,不是我们对应的code中的代码,所以我们在每发布一个版本的时候,需要保留该版本的dSYM文件。使用symbolicatecrash工具来进行转换。
Symbolicatecrash .crash .dSYM > aa.log
8.组织和搜罗一些常用的方法和宏来当作工具类,在我们使用时方便直接调用。
如:
static inline NSString* NonNilString(NSString* str) {
return str ? str : @"";
}
static inline id NonNilObject(id obj) {
return obj ? obj : [NSNull null];
}

4万+

被折叠的 条评论
为什么被折叠?



