读书笔记(一)
1.判断是否实现某个方法
A *a =[[A alloc] autorelease];
if([a respondsToSelector:@selector(methodName)])
{
//do something
}else{
//do other something
}
2.判断某类是不是实现了某一协议
A *a =[[A alloc] autorelease];
if([a conformsToProtocol:@protocol(protocolName)])
{
//do something
}else{
//do other something
}
3.new和[[xxxx alloc]init]区别
我们先看看源码
+ new
{
id newObject = (*_alloc)((Class)self, 0);
Class metaClass = self->isa;
if (class_getVersion(metaClass) > 1)
return [newObject init];
else
return newObject;
}
+ alloc
{
return (*_zoneAlloc)((Class)self, 0, malloc_default_zone());
}
- init
{
return self;
}
通过源码中我们发现,[className new]基本等同于[[className alloc] init];
区别只在于alloc分配内存的时候使用了zone.
它是给对象分配内存的时候,把关联的对象分配到一个相邻的内存区域内,以便于调用时消耗很少的代价,提升了程序处理速度;
4.在头文件中声明私有方法
在.m文件中, 使用类别(
Categor)可以实现声明私有方法.
5.判断某一对象是否为空
self=[super init];
if(self==[super init]){//或者 if(self)
}
6.字符串操作
(一).字符串截取
//从form到字符串末尾,包括form的位置
- (NSString *)substringFromIndex:(NSUInteger)from;
//从字符串开始到to位置,不包括to位置
- (NSString *)substringToIndex:(NSUInteger)to;
//截取range范围内的字符串
- (NSString *)substringWithRange:(NSRange)range;
//利用给定的分隔符截取分隔符分开的子字符串数组
- (NSArray *)componentsSeparatedByString:(NSString *)separator;
(二).比较字符串
- (BOOL)isEqualToString:(NSString *)aString;
//是否以。。结尾
- (BOOL)hasSuffix:(NSString *)aString;
判断字符串以..开头
- (BOOL)hasPrefix:(NSString *)aString;
(三).比较字符串
//下列方法会逐个字符的比较,返回的NSComparisonResult包含升序,相等,降序三个值(NSOrderedAscending NSOrderedSame NSOrderedDescending)
- (NSComparisonResult)compare:(NSString *)string;
- (NSComparisonResult)compare:(NSString *)string options:(NSStringCompareOptions)mask;
- (NSComparisonResult)compare:(NSString *)string options:(NSStringCompareOptions)mask range:(NSRange)compareRange;
- (NSComparisonResult)compare:(NSString *)string options:(NSStringCompareOptions)mask range:(NSRange)compareRange locale:(id)locale; /
//忽略大小写比较
- (NSComparisonResult)caseInsensitiveCompare:(NSString *)string;
(四).大小写操作:
- (NSString *)uppercaseStringWithLocale:(NSLocale *)locale NS_AVAILABLE(10_8, 6_0);//全部转成大小
- (NSString *)lowercaseStringWithLocale:(NSLocale *)locale NS_AVAILABLE(10_8, 6_0);//全部转成小写
- (NSString *)capitalizedStringWithLocale:(NSLocale *)locale NS_AVAILABLE(10_8, 6_0);//仅首字母转大小
类似java的indexOf方法:
- (NSRange)rangeOfString:(NSString *)aString;//如果包含则返回aString的位置,否则返回location为-1,length为0
NSString *string=@“abcdefg”;
NSRange range=[string rangeOfString:@“bcd”];
if(range.location==NSNotFound){
//do something
}else{
NSLog(@“找到的范围:%@”,NSStringFromRange(range));
}
//下面的mask是指定从哪里开始搜索即从头向尾还是从尾到头的顺序搜索
- (NSRange)rangeOfString:(NSString *)aString options:(NSStringCompareOptions)mask;
NSString *string=@“abcdefg”;
//从尾到头的顺序搜索
NSRange range=[string rangeOfString:@“bcd” options:NSBackwardsSearch];
if(range.location==NSNotFound){
//do something
}else{
NSLog(@“找到的范围:%@”,NSStringFromRange(range));
}
//下面的searchRange是指定要搜索的范围
- (NSRange)rangeOfString:(NSString *)aString options:(NSStringCompareOptions)mask range:(NSRange)searchRange;
- (NSRange)rangeOfString:(NSString *)aString options:(NSStringCompareOptions)mask range:(NSRange)searchRange locale:(NSLocale *)locale NS_AVAILABLE(10_5, 2_0);