nil是一个对象指针为空,Nil是一个类指针为空,NULL是基本数据类型为空。这些可以理解为nil,Nil, NULL的区别吧。
iOS剪切板
UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];
pasteboard.string = @"要赋给剪切板的字符串";
1 ID
可以传递任何消息给id,但如果该id不支持这个消息就会返回一个运行时异常,通常就是:“unrecognisedselector sent to instance to XXX” 消息。
2 SEL
SEL 类型也可以用NSSelectorFromString(NSString *)函数创建
3
nil 用来给对象赋值,
NULL 则给任何指针赋值,NULL 和 nil 不能互换,
nil 用于类指针赋值,而NSNull 则用于集合赋值,
如:
a.if (object == nil) {}//判断对象为空
b.UIViewController *controller = [NSArray objectAtIndex:i];//判断数组元素是否为空
if ((NSNull *)controller == [NSNull null]) {
//...
}
c.NSString *userId = [NSDictionary objectForKey:@"UserID"];//判断字典对象的元素是否为空
if (userId == [NSNull null]) {
}
4 预处理宏
a 关闭调试信息:
#define DLog();
b
打印文件名,行号,函数详情,函数名信息,
NSLog(@"%s %d %s",__FILE__, __LINE__,__PRETTY_FUNCTION__,__FUNCTION__);
#ifdef DEBUG
# define DLog(fmt,...) NSLog((@"%s [Line %d]" fmt), __PRETTY_FUNCTION__,__LINE__,##__VA_ARGS__);
#else
# define DLog(...);
#endif
5 自动释放池(AutoReleasePool)
在程序中,当有大量的自动变量需要管理时,你就需要自行创建 NSAutoreleasePool来管理;
在创建线程或者使用NSOperation时,也需要创建独立的NSAutoreasePool 来管理线程;
另外,重载didReceiveMemoryWarning()函数是一个好的编程习惯;
6 程序执行流程
所以流程应该是这样:
(loadView/nib文件)来加载view到内存 ——>viewDidLoad函数进一步初始化这些view ——>内存不足时,调用viewDidUnload函数释放views
—->当需要使用view时有回到第一步
如此循环
7 ASIHttpRequest
http://www.dreamingwish.com/dream-2011/apples-third-party-development-libraries-asihttprequest.html
8 判断一个字符串是否为空
if (str == nil)
if ([str length] == 0)
9 处理数值对象
a. NSInteger ------- int
NSNumber *numObj = [NSNumber numberWithInt:2];
NSInteger myInteger = [numObj integerValue];
int a = [myInteger intValue];
b. 浮点数值使用CGFloat。NSDecimalNumber 对象进行处理
NSDecimalNumber *myDecimalObj = [[NSDecimalNumber allo] initWithString:@"23.39"];
NSLog(@"myDecimalObj doubleValue = %6.3f",[myDecimalObj doubleValue]);
CGFloat myCGFloatValue = 43.4;
NSDecimalNumber *myOtherDecimalObj = [[NSDecimalNumber alloc] initWithFloat:myCGFloatValue];
NSLog(@"myOtherDecimalObj doubleValue=%6.3f",[myOtherDecimalObj doubleValue]);
10 处理日期时间NSDate
a. 获取当前日期时间的代码如下
NSDate *dateToDay = [NSDate date];
NSDateFormatter *df = [[NSDateFormatter alloc] init];
[df setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSLocale *locale = [[NSlocale alloc] initWithLocalIdentifier:@"en_US"];
[df setLocale:locale];
b. 从字符串生成日期对象的代码如下
NSString *myDateString = @"2009-09-15 18:30:00";
NSDate *myDate = [df dateFromString: myDateString];
c. 日期比较的代码
switch ([dateToDay compare:myDate]) {
case NSOrderedSame:
break;
case NSOrderedAscending:
break;
case NSOrderedDescending:
break;
default:
break;
}
11 常用数组操作
a 判断数组中是否包含某个对象
- (BOOL)containsObject:(id)anObject
b 增加、插入元素
NSMutableArray *array = [NSMutableArray alloc] init];
[array addObject:anObject];
[array insertObject:anObject atIndex:2];
[array addObjectsFromArray:anotherArray];
c 获取某个元素的索引值
NSInteger idx = [array indexOfObject:anObject];
d 更新数组元素
[mutableArray replaceObjectAtIndex:idx withObject:[NSNumber numberWithInt:9]]
e 数组遍历
1.使用枚举
for (NSString *str in array) {
}
2 使用NSEnumerator
NSEnumerator *enumerator = [array objectEnumerator];
id obj;
for ( obj == [enumerator nextObject]) {
}
3.使用for循环
for (int i = 0; i < [array count]; i++) {
[array objectAtIndex:i];
}
12 字符串数组排序
a. NSArray *sortedArray = [array sortedArrayusingSelector:@selector(caseInsensitiveCompare:)];
b. NSCountedSet *cset = [[NSCountedSet alloc] initWithArray: array];
NSArray *sorted = [[cset allObjects] sortedArrayUsingSelector:@selector(compare:)];
13 OC中产生随机数的方法
srandom(time(NULL));
arc4random()%n;
14 数组map操作(-makeObjectsPerformSelector())
该函数可以将一个操作作用在数组中的所有元素上,如;
NSArray *fighters = ...;
[fighters makeObjectsPerformSelector:@selector(fly:)];
- (void)fly:(id)sender {
}
15 对象数组排序(使用NSSortDescriptor)
16 对象数组过滤 (使用 NSPredicate)
NSPredicate *aPredicate = [NSpredicate predicateWithFormat:@"SELF.lastName beginswith[c] 'a'"];
NSArray *array = [array filteredArrayUsingPredicate:aPredicate];
17 删除数组中元素
一种更安全的方法,将满足条件的元素放进一个临时数组,再将这个数组返回,代码如下:
- (NSArray *) filterPersonWithLastName:(NSString *)filterText {
Person *person = [Person alloc ] init];
NSMutableArray *personList = [person creatTempraryList];
NSLog(@"before");
NSMutableArray *personsToRemove = [NSMutableArray array];
for (Person *person in personList) {
if (filterText && [filterText rangeOfString:person.laseName options:NSLiteralSearch | NSCaseInsensitiveSearch].length == 0)
[personsToRemove addObject:person];
}
[personList removeObjectsInArray:personsToRemove];
}
- Objective C 中的nil,Nil,NULL和NSNull理解
kenyo网友的原创说法是:做IOS开发的估计都对Objective-C的内存管理机制很头疼,一不小心程序就会出内存泄露,我也不例外,前几天被指针的置nil与release给搞惨了,今和大家详细解说一 ...
- IOS中nil/Nil/NULL的区别
类与对象的概念 类是对同一类事物高度的抽象,类中定义了这一类对象所应具有的静态属性(属性)和动态属性(方法). 对象是类的一个实例,是一个具体的事物. 类与对象是抽象与具体的关系. 类其实就是一种数据 ...
- IOS中类和对象还有,nil/Nil/NULL的区别
转自:http://blog.sina.com.cn/s/blog_5fb39f910101akm1.html 类与对象的概念 类是对同一类事物高度的抽象,类中定义了这一类对象所应具有的静态属性(属性 ...
- nil、Nil、NULL和NSNull的理解
http://blog.sina.com.cn/s/blog_4930f8e60101h71b.html 其实早就想研究一下nil.Nil.NULL和NSNull之间的区别,只是工作上除了nil,其它 ...
- iOS 关于nil和Nil及null与<null>的区别
问题是这样的. NSDictionary *sample = [NSJSONSerialization JSONObjectWithData:received options:NSJSONReadin ...
- iOS中nil、Nil、NULL、NSNull详解(转)
ObjC 里面的几个空值符号经常会差点把我搞死,这些基础的东西一点要弄清楚才行,以提高码农的基本素质. nil nil 是 ObjC 对象的字面空值,对应 id 类型的对象,或者使用 @interfa ...
- ios nil、NULL和NSNull 的使用
nil用来给对象赋值(Objective-C中的任何对象都属于id类型),NULL则给任何指针赋值,NULL和nil不能互换,nil用于类指针赋值(在Objective-C中类是一个对象,是类的met ...
- IOS 学习笔记 2015-03-20 O之 nil,Nil,NULL,NSNull
1.oc最好 用nil [ nil 任意方法],不会崩溃 nil 是一个对象值.NULL是一个通用指针(泛型指针). 2. NSNULL,NULL和nil在本质上应该是一样的,NULL和nil其 ...
- iOS解析数据判断nil NULL Null的方法
+ (BOOL)isNil:(NSObject*)obj { if (obj == nil || obj == NULL) { return YES; } if ([obj isKindOfClass ...
随机推荐
- STL之map
参见http://www.cplusplus.com/reference/map/map/ template < class Key, ...
- 使用OutputDebugString输出调试信息
在编写控制台程序的时候我们经常会使用printf输出调试信息,使我们了解程序的状态,方便调试,但是当编写非控制台程序的时候这种方法就行不通了,那我们应该怎么办?上网查了一些方法,大致就如下几种 使用L ...
- jQuery图片无缝轮播插件;
图片轮播这种效果在web开发中看常见,网上的插件也有很多,最近在整理项目的过程中,把之前的图片轮播效果整合了一下,整理成一个可调用的插件以做记录,也方便更多前端爱好者来学习使用:图片的轮播原理很简单, ...
- 开发中可能会用到的几个 jQuery 小提示和技巧(转)
今天,我们将分享一些很有用的技巧和窍门给 jQuery 开发人员.jQuery 是最好的 JavaScript 库之一,用于简化动画,事件处理,支持 Ajax 和 HTML 的客户端脚本.网络中有大量 ...
- Leetcode#147 Insertion Sort List
原题地址 心得:有关链表的题目,多用中间变量,代码写得清晰一点,适当注释 代码: ListNode *insertionSortList(ListNode *head) { if (!head) re ...
- ajax跨域请求,页面和java服务端的写法
方法一(jsonp): 页面ajax请求的写法: $.ajax({ type : "get", async : false, cache : false, url : " ...
- Matlab命令系列之目录操作
Matlab命令系列之目录操作 filesep 用于返回当前平台的目录分隔符,Windows是反斜杠(),Linux是斜杠(/).有时此命令结合ispc命令使用,可以灵活的设置目录分割符. fullf ...
- 编程计算并输出1~n之间所有素数之和
http://www.tuicool.com/articles/qaaA3i TODO
- JavaScript之arguments对象讲解
javascript的arguments对象类似于PHP的extract()函数实现. 在不确定函数参数个数的情况下,可以通过arguments访问参数,并以索引0为起始. function sayH ...
- CSS 外边距(margin)重叠及防止方法
边界重叠是指两个或多个盒子(可能相邻也可能嵌套)的相邻边界(其间没有任何非空内容.补白.边框)重合在一起而形成一个单一边界. 两个或多个块级盒子的垂直相邻边界会重合.结果的边界宽度是相邻边界宽度中最大 ...