iOS操作小整理

面向对象具有良好的可扩展性和重用性

描述类即描述的是这个类的特点,类指的是一个大的类别,如:一类人,对象时类中的一个

+ (id)alloc; +表⽰示这个⽅法属于类,只能类执行。id返回值类型,表示任意类型的对象,即创建好的对象。 

- (id)init; -表⽰示这个⽅法属于对象,只能对象执行。id返回值 类型,表示初始化完成的对象。 

@public是公有的可以任意访问,但是相对的数据的安全性就得不到保证,可以任意进行修改.另外使用@public,暴露了内部的细节,同时也不符合面向对象语言三大特点之一的封装.

如果在其他的文件中想要访问对象@protected修饰的实例变量时,添加方法 使用setter设置器和getter访问器就行

用import引入头文件容易引起交叉导入,导致错误 所以这时候应该使用@class ,用@class可以防止交叉引入头文件的问题,系统会把A当做是一个已经存在的类来使用,不会把A.h的内容进行拷贝,就是用了一下A的名,其他不做任何的检测.告诉编译器@class后的字符串作为类名使用,并未导入类的 接口内容。有效避免嵌套循环导入

给super发消息,可以执⾏父类中实现的方法。 

完整的初始化方法:

 当这个对象在初始化过程中出现问题即self处,会返回一个空指针,如果是空指针接下来的赋值就没有任何意义了,跳过去,如果返回是一个正常的堆空间地址,才能继续赋值

当对象在执行方法的时候,子类重写了父类的方法,系统会优先使用子类的方法,如果没有重写,则用父类的方法

属性

属性的实现:关键字是@synthesize,前面放属性名,后面放对应的成员变量在XCode4.5之后开始不写的,所以在之前的工程里,还有大量的@systhesize,XCode4.5之后@synthesize name = _name;这个也包含在@property中


属性的属性

属性的属性一共有3类:

1.读写性控制(readonly、readwrite、setter、getter) 

readonly,告诉编译器,只声明getter方法(无setter方法)。

readwrite,告诉编译器,既声明setter⼜又声明getter。同时也是默认的设置 

2.原⼦性控制(nonatomic、atomic) 

atomic。setter、getter方法在多线程访问下是绝对安全的,即 setter、getter内部做了多线程访问处理。原子性控制的默认设置是 atomic 

nonatomic。setter、getter⽅法内部不会做多线程访问处理,仅是 普通的setter、getter方法 

3.语义设置(assign、retain、copy) 

assign。setter、getter内部实现是直接赋值。

retain。setter、getter的内部实现会做内存优化。 

copy。setter、getter的内部实现也会做内存优化。 

如果属性是非对象类型(比如int,float等)属性的语义设置使用 assign。 如果属性是对象类型(比如NSStrng、NSArray等)属性的语义设 置使⽤用retain。 如果属性是对象类型并且想得到参数的copy,使⽤用copy关键字。 

KVC

KVC(Key-Value-Coding),键值编码,是⼀种间接访问实例变量的⽅法。 key:键,⽤用于标识实例变量 

vlaue:实例变量对应的值 

NSString:不可变字符串

创建NSString之后,内容和长度不能更改

1.用字面量的方式创建字符串对象

NSString *str = @"散一夕暧昧和倾一摇温柔";

NSString *str1 = @[@"散一夕暧昧",@"倾一摇温柔"];

2.打印字符串的长度

NSLog(@"%ld", str.length);

——>11 

3.通过指定的下标获取字符串内容

NSLog(@"%C", [str characterAtIndex:3]);

——>暧

注意:小的%c打印字母数字等大的%C才能打印汉字

4.用便利构造器的方法创建字符串

NSString *str2 = [NSString stringWithString:@"女神之手巫妖王正在苏醒"];

5.字符串的截取

5.1 打印指定下标到结尾的字符串内容

NSLog(@"%@", [str2 substringFromIndex:4]);

——>巫妖王正在苏醒

 5.2 打印开头到指定下标的字符串内容

NSLog(@"%@", [str2 substringToIndex:4]);

——>女神之手

5.3 字符串截取

 (1) NSRange range = {4, 7};

       NSLog(@"%@", [str2 substringWithRange:range]);

——>巫妖王正在苏醒

 (2) NSLog(@"%@", [str2 substringWithRange:NSMakeRange(4, 7)]);

——>巫妖王正在苏醒

6.判断两个字符串内容是否相同

NSLog(@"%d", [str isEqualToString:str1]);

——> 0

7.判断是否有前缀

7.1前缀

NSString *prefix=@"女神之手";

NSLog(@"%d", [str2 hasPrefix:prefix]);

——> 1

7.2 后缀

NSString *suffix=@"苏醒了";

NSLog(@"%d", [str2 hasSuffix:suffix]);

——> 0

8. 把字符串转换成基本数据类型

NSString *strNum = @“1234p5";

NSInteger num = [strNum integerValue];

NSLog(@"%ld", num);

——> 1234

9.把任意类型转换成字符串类型

CGFloat blood = 87.5;

NSInteger level = 90;

NSString *str3 = [NSString stringWithFormat:@"%@, %ld, %g", @"忘忧", level, blood];

NSLog(@"%@", str3);

——>昵称:忘忧, 等级:90, 血量:87.5

10.字符串的大小写设置

NSString *strCase = @"shenmODalu RonGYaozHIrenG";

  1. 将所有的小写字母都变成大写

NSLog(@"%@", str.uppercaseString);

——> SHENMODALU RONGYAOZHIRENG

  1. 将所有的大写字母都变成小写

NSLog(@"%@", strCase.lowercaseString);

——> shenmodalu rongyaozhireng

  1. 除了首字母大写其他字母都小写

NSLog(@"%@", strCase.capitalizedString);

——> Shenmodalu Rongyaozhireng

11.字符串的比较

NSString *str = @"nihao";

NSString *newStr = @"buhao";

NSLog(@"%ld", [str compare:newStr]);

——>  1  

NSString *str1 = @"buhao";

NSString *newStr1 = @"nihao";

NSLog(@"%ld", [str1 compare:newStr1]);

——> -1   

NSString *str2 = @"buhao";

NSString *newStr2 = @"buhao";

NSLog(@"%ld", [str2 compare:newStr2]);

——> 0

12.字符串的拼接

NSString *str1 = @"叶寒";

NSString *str2 = @"忘忧";

NSString *newstr = [str1 stringByAppendingString:str2];

NSLog(@"%@", newstr);

——> 叶寒忘忧

13.替换

NSString *str1 = @"叶寒";

NSString *str2 = @“忘忧";

NSString *newstr = [str1 stringByAppendingString:str2];

NSString *strNew = [newstr  stringByReplacingOccurrencesOfString:@"叶寒" withString:@"散一夕暧昧"];

NSLog(@"%@", strNew);

——> 散一夕暧昧忘忧


NSMutableString可变字符串

创建NSMutableString之后内容可以修改,NSMutableString是NSString的子类

1.创建

1) NSMutableString *str = [[NSMutableString alloc]    initWithString:@"叶寒"];

NSLog(@"%@", str);

——> 叶寒

2) NSMutableString *str1 = [NSMutableString   stringWithString:@"忘忧"];

NSLog(@"%@", str1);

——> 忘忧

2.插入

[str insertString:@"小" atIndex:2];

NSLog(@"%@", str);

——> 叶小寒

3.替换

[str replaceCharactersInRange:NSMakeRange(1, 1)withString:@"老师"];

NSLog(@"%@", str);

——> 叶老师

4.拼接

NSString *newStr = [str stringByAppendingString:@"爱忘忧"];

NSLog(@"%@", newStr);

——> 叶老师爱忘忧

NSValue

把结构体和指针换成对象类型

结构体的,是访问成员变量,对象调用属性是点语法

    

NSSet集合

NSSet是无序的,NSSet不能有重复的元素,集合里的元素,必须是对象类型

1.便利构造器创建

NSSet *set=[NSSet setWithObjects:@"1",@"2",@"3",@"4",@"5",@"2", nil];

2.一般创建

NSSet *set1=[[NSSet alloc] initWithObjects:@"1",@"2",@"3",@"4",@"5", nil];

3.可变集合

NSMutableSet *set=[NSMutableSet setWithObjects:@"1",@"2",@"4",@"3",@"5", nil];

4.添加元素

[set addObject:@“6"];

5.删除元素

[set removeObject:@“1"];

6.清除所有

[set removeAllObjects];

7.快速枚举

for (NSString *str in set) {

NSLog(@“%@“,str);}



NSDate日期的类

NSDate *date=[NSDate date];

1. 获取一下当前所在时区,

NSTimeZone *zone=[NSTimeZone systemTimeZone];

2. 获取一下和0时区相差的秒数

NSInteger second=[zone secondsFromGMTForDate:date];

3. 通过相差的秒数,能获取到现在的时间

NSDate *localdate=[NSDate dateWithTimeIntervalSinceNow:second];

4. 明天此时的时间

NSDate *tomorrowDate =[NSDate dateWithTimeIntervalSinceNow:(32*3600)];

NSLog(@"%@",tomorrowDate );

5. 昨天此时的时间

NSDate *yesterday=[NSDate dateWithTimeIntervalSinceNow:-(16*3600)];

NSLog(@"%@",yesterday);

6. 时间间隔

对应的double类型

计算两个时间对象的时间间隔

NSTimeInterval interval=[tomorrowDate timeIntervalSinceDate:date];

NSLog(@"%g",interval);

7. NSDate->NSString

第一种方式

NSDate *date=[NSDate date];

NSString *dateStr=[NSString stringWithFormat:@"%@",date];

第二种方式,时间的格式yyyy-MM-dd HH-mm-ss

 y-年,M-月,d-日,H-24小时制,,h-12小时制,,m-分,,s-秒

NSDateFormatter *formatter=[[NSDateFormatter alloc] init];

[formatter setDateFormat:@"yyyy-MM-dd HH-mm-ss"];

NSDate *date=[NSDate date];

NSString *strDate=[formatter stringFromDate:date];

8. 字符串->NSDate

//使用前要先定义格式

NSString *timeStr=@"2015-7-23 17-18-10";

NSDate *date=[formatter dateFromString:timeStr];



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值