+ 类方法、实例对象、访问全局类数据
实例方法
[receiver message:argument]
[接收对象名称 方法 参数 ]
(BOOL)isEqualToEtring: (NSString *) aString
返回值 声明 /方法 参数类型 参数名
*是指针,指向创建的内存地址 在指针变量前加上一个* 得到的是指针所指向的内存存储空间内的数值。
: 是参数传递
@ 代表object-c语法
(.)点表达式 :出现在等号左边,该变量名称的setter方法被调用;出现在对象变量的右边,则该变量的getter方法被调用
^ 代码块 double(^my_block )(double1 double2) 定义了一个叫my_block的代码块,包含 两个浮点型参数,并返回一个双浮点型数值
id类型表示一个任意类型的对象
继承 复合
oc中数据可以被封装成两种形式:结构体和对象
对象 是一些可以储存信息并可以接收消息的代码和数据
结构 体只包含数据,不可以拥有方法且不可以接收消息
遍历数组:索引、NSEnumerator、快速枚举、代码块
-(id) init P64
初始化实例变量的方法。
使用new创建新对象的时候,系统执行了两个步骤:
为对象分配内存,即对象获得一个用来存放实例对象的内存块;
自动调用init方法,是对象进入可用状态。
所有init开头的方法都是构造函数,withxxxx就是带有不同参数的构造函数,(id)表示返回一个类实例
if(self = [super init]
为了让超类将所有需要的初始化工作一次性完成,需要调用[super init]。
init 方法返回的值(id类型数据,即泛型对象指针) 就是初始化的对象。
将[super init] 返回的结果赋给self是oc的惯例,这样做是为了防止超类在初始化过程中返回的结果与一开始创建的不一致。
super是调用父类的某个方法
[对象 操作] 表示该对象去执行什么操作
创建对象:
[ 类名 new]
[[ 类名 alloc ] init] (习惯)
刚分配的对象需要先初始化才能使用。
初始化:所有的BOOL类型变量初始化为NO,int类型变量初始化为0,float类型变量初始化为0.0,指针初始化为nil。
NSString的类方法 stringWithFormat:生成一个包含内容的字符串
//在OC中stringWithFormat会新申请一片空间并初始化字符串,所以每一个用stringWithFormat方法得到的字符串其指针都是不相的;
//而stringWithString是通过浅拷贝的方式得到字符串的,浅拷贝只拷贝指针不拷贝对象,所以其指针是相等的,内容也相等
-(void) setEngine:(Engine *)newEngine
(Engine *) newEngine 意思是将变量newEngine 强制转换为指向Engine类型数据的指针类型
强制转换为Engine类型的指针
返回值是一个指针
@property float pressure; 简化接口代码
@synthesize pressure; 简化实现代码
alert() js中弹框
对属性进行声明
@property (strong,nonatomic)NSObject* myProperty;
声明以关键字开始,后面括号里是属性特征,接着是属性的类型,最终是他的名字
属性特征是向其他对象描述该属性行为:
strong:对一个对象的强引用,使用strong、weak属性可以控制该属性所引用的对象是否保存在内存中
weak: 对一个对象的弱引用
rangeOfString
NSRange range=[path rangeOfString:@“serialize”]
NSRange是一个结构体
typedef struct _NSRange {
NSUInteger location;
NSUInteger length;
} NSRange;
包括location位置和length长度
整个代码意思是询问path路径里面有没有serialize字符串,然后输出range=serialize的位置和长度(9)
stringByReplacingCharactersInRange
解释:NSMakeRange(str.length-1, 1),将字符串str定位到第九个字符即‘9’,取长度为1的字符串,即9后第一个字符串 ‘0’,用字符串@“”替代‘0’,即所得的结果为“123456789”
stringByAppendingpathComponent路径拼接
- NSString *a = @"https://www.google.com.hk";
- NSString *b = @"/a/b";
- b = [a stringByAppendingPathComponent:b];
- NSLog(@"%@",b);
输出结果:https://www.google.com.hk/a/b
substringFromIndex 和 substringToIndex用法 :substringFromIndex是截取字符串后面的剩余部分,substringToIndex是截取字符串前面的部分
NSString *testsubstringToorFromIndex = @"test1234";
NSString *fromIndexstring = [testsubstringToorFromIndex substringFromIndex:2];
NSString *toIndexstring = [testsubstringToorFromIndex substringToIndex:2];
NSLog(@"subtringfromindex is %@",fromIndexstring);
NSLog(@"subtringToindex is %@",toIndexstring);
输出结果
2014-11-29 06:23:59.634 sdktest[587:11024] substringfromindex is st1234
2014-11-29 06:23:59.634 sdktest[587:11024] substringToindex is te
stringByReplacingOccurrencesOfString替换字符串
第一种(有发生替换):
如:
NSString * s = @"sss";
NSString * x = [s stringByReplacingOccurrencesOfString:@"s" withString:@"x"];
返回一个新的指针,内容是@"xxx"。新指针的retainCount是1,不可以手动release,会autorelease。
第二种(没有发生替换):
如:
NSString * s = @"sss";
NSString * x = [s stringByReplacingOccurrencesOfString:@"y" withString:@"x"];
因为没有发生替换,所以返回值还是原来的指针,内容还是@"sss"。这时候s的retainCount会被加1。
相当于NSString * x = [[s retain] autorelease];
建议:
如果需要多次替换字符串中的字符,最好不要使用stringByReplacingOccurrencesOfString。应该使用NSMutableString的实例方法replaceOccurrencesOfString:withString:options:range:。
attributeForName:方法可以获得属性值
oc 指针和对象的区别
比如 UIImageView * imgv=[[UIImageView alloc]init];
imgv是指针,指针指向的是对象。
[[UIImageView alloc]init]; 创建了一个对象
imgv = 写在前面,等于把imgv指向了那个对象。所以imgv是指针
而对象藏在内存的某个角落里面,需要通过指针来访问
指针指向了对象在内存中的一个地址 通过这个指针找到内存中的对象 以后写代码对指针进行操作就相当于对指针指向的对象进行操作
通过指针来找到对象而不是表示对象。
前面加*号是为了得到指针所指向对象的储存空间的数值,然后返回到UIImageView对象 (前面的UIImageView *是一个储存区,用来放置地址)
== 、isEqual、isEqualToString、isempty 区别
1、== 与isEqualToString
前者是比较两个指针的值
后者是比较两个字符串是否完全相同,对大小写敏感
2、== 与isEqual
前者是判断两个方法的引用是否相同,也就是内存地址是否一样
后者是判断一个类方法,判断这个对象在类型和值是否一样
3、is empty 和isEqualToString
[string isempty]是判断字符串是否为null
[string isEqualToString:@ “”]判断是不是“”
4、isEqual和isEqualToString
前者是继承NSObject的方法,后者是NSString的方法
后者是前者的衍生方法
isEqual 首先检查指针的等同性,相等直接返回YES ,然后是类的等同性,空或者非同类对象直接返回NO,
最后调用对象的比较器进行比较。比较器的名称指示出参与比较的对象的类名称,若均相等,返回YES
isEqualString 在比较对象都是字符串的条件下,直接判断字符串内容,比较对象不是字符串,报错
isEqualNode() 方法用于检查两个节点是否相等。
如果满足下列条件两个节点就相等并返回true:
- 有相同节点类型
- 相同的节点名,节点值,本地名,命名空间URI和前缀。
- 他们与所有的后代都有相同的子节点
- 有相同的属性和属性值(属性没有相同的排序方式)
isKindOfClass、isSubclassOfClass和isMemberOfClass区别(判断一个对象是否是某类的对象,或者是某个子类的对像)
首先创建父类与子类的对象
1、测试isKindOfClass
2、测试isSubclassOfClass
3、测试isMemberOfClass
结果:isSubclassOfclass和isKindOfClass的作用基本一致,主要是判断一个对象或者一个类是否为某个类的子类
isMemberOfClass 只有完全匹配的时候才会返回YES
nil、Nil、NULL的区别
nil:指向oc中对象的空指针。
Nil:指向oc中类的空指针。
NULL:指向其他类型的空指针,如一个c类型的内存指针。
一、nil
给对象赋值时一般会使用object = nil,表示想把这个对象释放掉;
或者对象由于某种原因,经过多次release,于是对象引用计数器为0了,系统将这块内存释放掉,这个时候这个对象为nil,称它为“空对象”。
二、Nil
nil和Nil在使用上是没有严格限定的,也就是说凡是使用nil的地方都可以用Nil来代替,反之亦然。
只不过从编程人员的规约中约定俗成地将nil表示一个空对象,Nil表示一个空类。
三、NULL我们知道Object-C来源于C、支持于C,当然也有别于C。而NULL就是典型C语言的语法,它表示一个空指针。
NSString 的常见方法
创建一个新字符串并将其设置为 path 指定的文件的内容,使用字符编码enc,在error上返回错误
+ (id)stringWithContentsOfURL:(NSURL *)url encoding:(NSStringEncoding)enc error:(NSError **)error;
创建一个新字符串并将其设置为 url 指定的内容,使用字符编码enc,在error上返回错误
+ (id)stringWithContentsOfFile:(NSString *)path encoding:(NSStringEncoding)enc error:(NSError **)error;
创建一个新的空字符串
+(id)string
创建一个新的字符串,并将其内容设置为string的内容
+ (id)stringWithString:(NSString *)string;
将新分配的字符串设置为astring的内容
- (id)initWithString:(NSString *)aString;
将字符串设置为path指定的文件的内容 使用字符编码enc,在error上返回错误
- (id)initWithContentsOfFile:(NSString *)path encoding:(NSStringEncoding)enc error:(NSError **)error;
将字符串设置为path指定的文件的内容 使用字符编码enc,在error上返回错误
- (id)initWithContentsOfURL:(NSURL *)url encoding:(NSStringEncoding)enc error:(NSError **)error;
返回字符串中的字符数目
- (NSUInteger)length;
返回索引(某个值,比如i)所在的Unicode字符
- (unichar)characterAtIndex:(NSUInteger)index;
返回从(?)开始到结尾的子字符串
- (NSString *)substringFromIndex:(NSUInteger)from;
返回从字符串开始的位置到(?)的子字符串
- (NSString *)substringToIndex:(NSUInteger)to;
根据指定范围返回子字符串
- (NSString *)substringWithRange:(NSRange)range;
比较两个字符串 (忽略大小写)
- (NSComparisonResult)caseInsensitiveCompare:(NSString *)string;
比较两个字符串
- (NSComparisonResult)localizedCompare:(NSString *)string;
测试字符串是否以aString开始
- (BOOL)hasPrefix:(NSString *)aString;
测试字符串是否以aString结尾
- (BOOL)hasSuffix:(NSString *)aString;
测试两个字符串是否相等
- (BOOL)isEqualToString:(NSString *)aString;
返回字符串 串中的每个单词的首字母大写,其余字母小写
- (NSString *)capitalizedString;
返回转换为小写的字符串
- (NSString *)lowercaseString;
返回转换为大写的字符串
- (NSString *)uppercaseString;
返回转换为UTF8编码格式的字符串
- (__strong const char *)UTF8String;
返回转换double类型的字符串
- (double)doubleValue;
返回转换float类型的字符串
- (float)floatValue;
返回转换int类型的字符串
- (int)intValue;
返回转换为NSInteger类型的字符串
- (NSInteger)integerValue
查找字符串:
获取字符串前5个字符
NSString* orginalString = =@“This is An EXAMPE”;
NSString* startSubstring = [orginalString substringToIndex:5] //“This ”空格
获取出去前5个字符串以外的字符
NSString*endSubstring = =[orginalString substringFromIndex:5]//“is An EXAMPLE”
获取特定范围内字符的字符串,首先创建一个NSRange结构体,定义开始和结束的范围
NSRange theRange = NSMakeRange(2,5);
括号内前面是位置,后面是长度;位置从0开始,有了NSRange后就可以请求NSString返回一个字符串
NSString* substring = [originalString substringWithRange:theRange];//“is is”
NSString* orginalString = =@“This is An EXAMPE”;
//THIS IS AN EXAMPLE
NSString* uppercaseString = [orginalString uppercaseString];
//this is an example
NSString* lowercaseStirng = [originalString lowercaseString];
//This Is An Example
NSString*capitalizedString= =[originalString capitalizedString];
NSString 比较字符串 NSCaseInsensitiveSearch不区分大小写比较 获取出现次数
http://blog.sina.com.cn/s/blog_897dd7be0100teh6.html
NSString 比较字符串
NSString *value = @"1234567890";
比较的方法:
[value compare:(NSString *)];
[value compare:(NSString *) options:(NSStringCompareOptions)];
[value compare:(NSString *) options:(NSStringCompareOptions) range:(NSRange)];
传入的参数:
compare:(NSString *)
传入一个需要比较的字符串。
例如 [value compare:@"1234567890"],返回 NSOrderedSame。
options:(NSStringCompareOptions)
传入 NSStringCompareOptions 枚举的值
enum{
NSCaseInsensitiveSearch = 1,//不区分大小写比较
NSLiteralSearch = 2,//区分大小写比较
NSBackwardsSearch = 4,//从字符串末尾开始搜索
NSAnchoredSearch = 8,//搜索限制范围的字符串
NSNumbericSearch = 64//按照字符串里的数字为依据,算出顺序。例如 Foo2.txt < Foo7.txt < Foo25.txt
//以下定义高于 mac os 10.5 或者高于 iphone 2.0 可用
NSDiacriticInsensitiveSearch = 128, //忽略 "-" 符号的比较
NSWidthInsensitiveSearch = 256, //忽略字符串的长度,比较出结果
NSForcedOrderingSearch = 512 //忽略不区分大小写比较的选项,并强制返回 NSOrderedAscending 或者 NSOrderedDescending
//以下定义高于 iphone 3.2 可用
NSRegularExpressionSearch = 1024 //只能应用于 rangeOfString:..., stringByReplacingOccurrencesOfString:...和 replaceOccurrencesOfString:... 方法。
使用通用兼容的比较方法,如果设置此项,可以去掉 NSCaseInsensitiveSearch 和 NSAnchoredSearch
}
range:(NSRange)
比较字符串的范围
结构变量:
location: 需要比较的字串起始位置(以0为起始)
length: 需要比较的字串长度
返回值:
typedef enum _NSComparisonResult {
NSOrderedAscending = -1, // < 升序
NSOrderedSame, // = 等于
NSOrderedDescending // > 降序
} NSComparisonResult;
获取NSString某一个字符串出现的位置
http://blog.youkuaiyun.com/abby_sheen/article/details/7546853
-(NSRange)rangeOfString:(NSString*)subString inString:(NSString*)string atOccurrence:(int)occurrence
{
int currentOccurrence = 0;
NSRange rangeToSearchWithin = NSMakeRange(0, [string length]);
while (YES)
{
currentOccurrence++;
NSRange searchResult = [string rangeOfString:subString options:NULL range:rangeToSearchWithin];
if (searchResult.location == NSNotFound)
{
return searchResult;
}
if (currentOccurrence == occurrence)
{
return searchResult;
}
int newLocationToStartAt = searchResult.location + searchResult.length;
rangeToSearchWithin = NSMakeRange(newLocationToStartAt, string.length - newLocationToStartAt);
}
}
子字符串在string中出现的次数。NSMutalbeString中的方法来获取:
- (NSUInteger)replaceOccurrencesOfString:(NSString *)target withString:(NSString *)replacement options:(NSStringCompareOptions)options range:(NSRange)searchRange;
数组
创建数组
NSArray* myArray = @[@“one”,@“two”] ; //数组里面包括两个NSString对象
数组对象不能是nil!!!,可以使用[NSNull null],这是null的标准占位符对象
从数组中获取对象
NSString*oneString = myArray[0];
获取对象的语法通用的是
NSString*oneString = [myArray objectAtIndex:0];
数组是从0开始计数。
也可以使用Count来查询数组的大小
int count = myArray.count;
查询数组中某一个对象的索引:indexOfObject
NSArray* myArray = @[@“one”,@“two”] ;
int index = [myArray indexOfObject:@“two”;//1
if (index==NSNotFound){
NSLog(@“”);
}
indexOfObject:方法仅当传递入得对象与数组中所存在的对象恰为同一对象实例时才会正常工作
查找一个与传入对象相等的对象,应使用indexOfObjectEqualTo:方法 (例如:两个字符串对象为不同的实例但包含相同的文本)
创建一个数组包含其他数组的元素 subArrayWithRange:方法
NSArray* myArray = @[@“one”,@“two”,@“there”] ;
NSRange subArrayRange = NSMakeRange(1,2);
NSArray* subArray = [myArray subArrayWithRange:subArrayRange];
快速枚举
for (NSString* string in myArray){
//此代码会重复执行3次,每次对应数组中的一个元素
}
可变数组 NSMutableArray
addObject:方法 添加元素到数组末尾
insertObject:atIndex:方法 添加元素到指定位置
NSMutableArray* myArray = [NSMutableArray arrayWithArray:[@“one”,@“two”]];
//添加“there”到末尾
[myArray addObject:@“there”];
//添加“zero”到起始位置
[myArray insertObject:@“zero” atIndex:0];
移除元素
removeObject:将提供的对象移除 ,并且会移除数组中所有相同的对象
removeObjectAtIndex: 移除指定位置的对象
[myArray removeObject:@“one”]
[myArray removeObjectAtIndex:1]
替换数组对象
replaceObjectAtIndex:withObject:方法
[myArray replaceObjectAtIndex:1 withObject:@“Bananas”];
字典创建
NSDictionary* translationDictionary = @{
@“greeting”:@“hello”
@“farewell”:@“goodbye”
};
字典查询
NSString* greeting = translationDictionary[@“greeting”];
NSValue 储存大量非对象的类型 NSNumber是NSValue的子类,用来储存数字
NSNumber* theNumber = @123;
NSData为任意数据的容器
通过URL加载文件
NSString* filePath = @“/Example/Test.txt”;
NSData* loadeData = [NSData dataWithContentsOfFile:filePath];
将NSData对象转换为NSString ,可以使用NSString类的initWithData:encodeing:方法 接收一个NSData对象和一个NSStringEncodeing值(指示该方法如何解释字节)
NSString* loadedString = [[NSString alloc] initWithData:loadedData encodeing:NSUTF8StringEncodeing];
将NSData对象写入磁盘,通过writeToFile:atomically: 方法
标志设置为YES则说明,NSData会先将字节写入一个临时文件,然后写入完成后再移动至指定位置;NO则直接写入目标文件
NSString* filePath = @“/Examples/Test.txt”;
[loadedData writeToFile:filePath atomically:YES];
代码块
定义一个不带任何参数的,没有返回值的Block变量
void(^myBlockVariable)(void)
各部分含义
[Retuan Type] (^[Variable Name])([Parameters])
定义一个Block后,必须列出它接受的参数
void(^myBlockVariable)(BOOL parameter);
myBlockVariable = ^(BOOL parameter){
//代码
};
调用
myBlockVariable();