目录
- 一、对象/实例方法与类方法的区别
- 二、常用类方法
- 1.C字符串转OC字符串
- 2.OC字符串拼接
- 三、常用对象方法
- 1.字符长度
- 2.得到指定下标的字符
- 3.判断2个字符串是否相同
- 4.比较字符串大小
- 四、匿名对象
一、对象/实例方法与类方法的区别
OC方法分为两大类:
(1)对象方法/实例方法:创建实例才可以调用
(2)类方法:不需要创建对象就可以调用,只能访问同一个target的类方法(文件夹中复制到同一个包下可使用)
声明:
(1)对象:- (直接访问属性,self调用本类其他方法)
(2)类方法:+ (不需要访问属性,不调用其他方法)
@interface Person:NSObject
{
NSString *_name;
}
- (void)sayhi;//-对象函数
- (void)run;
+ (void)haha;//+类函数
+ (Person *)Person;
@end
@implementation Person
- (void)sayhi
{
//对象/实例函数可以直接访问属性
NSLog(@"hi,我叫%@",_name);
}
- (void)run
{
//对象/实例函数可以用self调用本类方法
[self sayhi];
NSLog(@"我在奔跑");
}
+ (void)haha
{
//不需要访问属性,不调用其他方法,多用:类方法
NSLog(@"哈哈哈哈哈哈");
}
@end
调用:
(1)对象:创建对象,对象名调用
(2)类方法:类名直接调用(节约空间,提高效率)
//调用对象/实例函数:实例+实例函数
Person *p111 =[Person new];
[p111 sayhi];
[p111 run];
//调用类方法,类名+类函数
[Person haha];
规范:为一个类提供一个纯净的类同名方法,如下Person方法,类方法调用属性必须实例化一个对象;
@interface Person:NSObject
{
NSString *_name;
int age;
}
//+规范:同类名的类函数
+ (Person *)person;
//补充
+ (Person *)personWithName:(NSString *)name andAge:(int)age;
@end
@implementation Person
//同名类方法
+ (Person *)person
{
//规范
Person *p1 =[Person new];
return p1;
}
//带参数的类方法
+ (Person *)personWithName:(NSString *)name andAge:(int)age
{
Person *p1 =[Person new];
p1->_name = name;
p1->_age = age;
return p1;
}
@end
int main(int argc,const char * argv[])
{
//等效
Person *p1 =[Person new];
Person *p2 =[Person person];
//创建者指定属性时,就为这个类方法带参数
Person *p3 =[Person personWithName:@"Tom" andAge:19];
return 0;
}
二、常用类方法
1.C字符串转OC字符串
stringWithUTF8String
一般多用在用户输入字符,通常是char类型,转为string类型;
char *str0 = "rose";
NSString *str1 = [NSString stringWithUTF8String:str0];
NSLog(@"str1 = %@",str1);
2.OC字符串拼接
stringWithFormat
String拼接使用率100%
int age = 19;
NSString *name=@"Tom";
NSString *str = [NSString stringWithFormat:"大家好,我叫%@,我今年%d岁了",name,age];
NSlog(@"str = %@",str);
三、常用对象方法
1.字符长度
length
返回值:NSUInteger
其实就是unsigned leng得到的数字个数,可以处理中文哦
NSString *str= @"cungudafa";
NSUInteger len = [str length];
NSLog(@"len = %lu",len); //%lu是无符号长整型整数
结果:len = 7
2.得到指定下标的字符
charaterAtIndex
支持中文处理
NSString *str= @"cungudafa";
unichar ch = [str charaterAtIndex:2];//unichar是unsigned short占两个字节,中文可
NSlog(@"ch = %C ",ch);//%C可以显示中文,%c只能显示英文
结果:ch = n
3.判断2个字符串是否相同
isEqualToString
NSString *str1 = @"Tom";
NSString *str2 = @"Tom";
if(str1 == str2)//类型和数据都要相同才相同,存在隐藏危险,不适用
{
//....
}
if([str1 isEqualToString:str2])
{
//...
}
4.比较字符串大小
compare
:返回值-1,0,1
NSCompariseonResult res = [str1 compare:str2];
//同
int res = [str1 compare:str2];
四、匿名对象
- 只能使用一次
- 每次创建都是不同的对象
[Person new]->_name = @"Tom";
[Person new]->_age = 19;
[[Person new] sayhi];
使用场景:
方法会使用到对象,但是其他地方不会再使用这个对象。