IOS学习方向

本篇主要是总结:1.自己在过去一年以来的学习经验以及不足;
2.接下来应该怎么去学习,学习那些方面

所取得的成绩

1.基本属性的运用。

strong,weak,copy,assign,nonatomic,atomic,copy等属性修饰的作用有了一个比较明确用法。一般默认的是strong,也就是强引用,而为了避免循环引用时,用weak,修饰string时,用copy,以得到新的内存分配,而不只是原来的引用。所有的属性,都尽可能使用nonatomic,以提高效率,除非真的有必要考虑线程安全。有关copy,retain,assign,retain是指针拷贝,copy是内容拷贝,使用assign: 对基础数据类型 (NSInteger)和C数据类型(int, float, double, char,等)。在拷贝之前,都会释放旧的对象。,可以参考OC中assign、copy 、retain等关键字的含义.

2.OC中页面的传值

OC中传值我现在熟悉的有1.属性传值;2.代理传值 3.通知传值 4.block传值 5.全局变量 可以参考这篇浅谈iOS常用的几种传值方式

3.数据的存储方式 转自:iOS 数据存储的常用方式
1.xml属性列表(plist)归档

只能存储基本数据类型(NSString、NSDictionary、NSArray、NSData、NSNumber

NSString *docPath =NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES)[0];
    // 拼接要保存的地方的路径
    NSString *filePath = [docPathstringByAppendingPathComponent:@"str.plist"];
    // 1、写入数据
    [array writeToFile:filePath atomically:YES];
    // 2、 读取数据
    NSArray *array = [NSArray arrayWithContentsOfFile:filePath];
2.偏好设置

UserDefaults设置数据时,不是立即写入,而是根据时间戳定时地把缓存中的数据写入本地磁盘。所以调用了set方法之后数据有可能还没有写入磁盘应用程序就终止了。出现以上问题,可以通过调用synchornize方法强制写入

用法:

NSUserDefaults *UserDefaults = [NSUserDefaultsstandardUserDefaults];
  // 1、写入
  [UserDefaults setBool:NO forKey:@"isLogined"];
  // 强制写入
  [defaults synchornize];  

  // 2、读取
  BOOL isVisble = [UserDefaults boolForKey:@"isLogined"];

其实,它存储的就是一个字典

3.归档与反归档

基本使用:需要归档的模型类必须要遵守NSCoding协议,然后模型实现类中必须实现两个方法:1>encodeWithCoder ->归档;2> initWithCoder: - > 解档

使用注意
如果父类也遵守了NSCoding协议,请注意:
应该在encodeWithCoder:方法中加上一句

[super encodeWithCode:encode]; // 确保继承的实例变量也能被编码,即也能被归档

应该在initWithCoder:方法中加上一句

self = [super initWithCoder:decoder]; // 确保继承的实例变量也能被解码,即也能被恢复

示例

// 1. 自定义模型类Person

// 1.1 Person.h文件
#import 

// 只要一个自定义对象想要归档,必须要遵守NSCoding协议,并且要实现协议的方法
@interface Person : NSObject

@property (nonatomic, assign) int age;

@property (nonatomic, strong) NSString *name;

@end

// 1.2 .m实现文件
#import "Person.h"

#define KName @"name"
#define KAge @"age"

@implementation Person

// 什么时候调用:当一个对象要归档的时候就会调用这个方法归档
// 作用:告诉苹果当前对象中哪些属性需要归档
- (void)encodeWithCoder:(NSCoder *)aCoder
{
    [aCoder encodeObject:_name forKey:KName];
    [aCoder encodeInt:_age forKey:KAge];
}

// 什么时候调用:当一个对象要解档的时候就会调用这个方法解档
// 作用:告诉苹果当前对象中哪些属性需要解档
// initWithCoder什么时候调用:只要解析一个文件的时候就会调用
- (id)initWithCoder:(NSCoder *)aDecoder
{
    #warning  [super initWithCoder]
    if (self = [super init]) {
        // 解档
        // 注意一定要记得给成员属性赋值
      _name = [aDecoder decodeObjectForKey:KName];
      _age = [aDecoder decodeIntForKey:KAge];
    }
    return self;
}

@end

// 2. 实例 -》基本使用:取 / 存 数据 
// 归档
 [NSKeyedArchiver archiveRootObject: self.persons toFile:KFilePath];// 将self.persons模型对象数组 

 // 解档       
 _persons = [NSKeyedUnarchiver unarchiveObjectWithFile:KFilePath];
4.sqlite

你可能感兴趣的:(IOS学习方向)