1,类的引用
2,交叉引用与循环引用
3,传值的方式
4,数据持久化
5,NSUserDefaults的使用
6,单例
// Observer.h
#import <Foundation/Foundation.h>
#import "Person.h"
#import "ClassRoom.h"
@interface Observer : NSObject
@property (strong, nonatomic) Person *per;
@property (strong, nonatomic) ClassRoom *classRoom;
@property (strong, nonatomic) NSString *keyword;
@end
// Observer.m
//----属性传值
//1.A.xx -> B.xx
//2.A.xx -> C.xx
// C.xx -> B.xx
//----初始化/代理 方法传值
//----数据持久化(将任意数据归档之后,存放进本地文件)
//关联式引用
#import "Observer.h"
#import "Computer.h"
@implementation Observer
- (instancetype)init
{
self = [super init];
if (self) {
NSLog(@"observer init");
self.per = [[Person alloc]init];
self.per.keyword = self.keyword;
// _per.computer.keyword = _per.keyword;
_classRoom = [[ClassRoom alloc]init];
_classRoom.keyword = _per.keyword;
[self actionBegin];
}
return self;
}
- (void)actionBegin
{
[_per walkToClassRoom:_classRoom];
// [_per walkToClassRoom:_classRoom];
NSLog(@"persons = %@",_classRoom.persons);
}
// ClassRoom.h
#import <Foundation/Foundation.h>
@interface ClassRoom : NSObject
//给ClassRoom设置一个strong mutable的Array属性
@property (strong, nonatomic) NSMutableArray *persons;//先初始化后使用
@property (strong, nonatomic) NSString *keyword;
@end
// ClassRoom.m
#import "ClassRoom.h"
@implementation ClassRoom
- (instancetype)init
{
self = [super init];
if (self) {
_persons = [NSMutableArray array];
}
return self;
}
@end
// Person.h
#import <Foundation/Foundation.h>
@class Computer;
@class ClassRoom;
@interface Person : NSObject
//{
// Computer *_computer;
//}
@property (strong, nonatomic) NSString *name;
@property (strong, nonatomic) Computer *computer;
//strong: 在使用属性的过程中,保证对象存在
//retain:
@property (strong, nonatomic) NSString *keyword;
//建立一个便利构造,通过电脑对象初始化Person
+ (instancetype)personWithComputer:(Computer *)computer;
- (void)walkToClassRoom:(ClassRoom *)classRoom;
@end
// Person.m
//
// -------- computer属性的存在时间
//------------ person的存在时间
#import "Person.h"
#import "Computer.h"
#import "ClassRoom.h"
@implementation Person
- (instancetype)init
{
self = [super init];
if (self) {
NSLog(@"person init");
_computer = [[Computer alloc]init];
// _computer.keyword = self.delegate.keyword;
_computer.delegate = self;
}
return self;
}
+ (instancetype)personWithComputer:(Computer *)computer
{
Person *per = [[self alloc]init];
per.computer = computer;
per.computer.delegate = per;
// per.point.x = 5;//
// [per autorelease];//在方法中加入autorelease,使其内存管制无误,有且仅有一个
return [per autorelease];
}
- (void)walkToClassRoom:(ClassRoom *)classRoom
{
[classRoom.persons addObject:self];
}
- (void)dealloc
{
[_computer release];
[super dealloc];
}
@end
// Computer.h
#import <Foundation/Foundation.h>
#import "Person.h"
@interface Computer : NSObject
@property (assign, nonatomic)Person *delegate;//上一级
//assign: 弱引用,不增加引用计数,保证对象即时释放
//weak:
@property (strong, nonatomic) NSString *keyword;
@end
// Computer.m
#import "Computer.h"
@implementation Computer
- (instancetype)init
{
self = [super init];
if (self) {
NSLog(@"computer init");
}
return self;
}
//循环引用
- (void)dealloc
{
self.delegate = nil;//研究知识点:当owner是strong属性和assign属性的时候,分别有什么作用
[super dealloc];
}
@end
// main.m
#import <Foundation/Foundation.h>
#import "Observer.h"
#import "Person.h"
#import "Computer.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
/*
Person *per = [[Person alloc]init];
// Computer *computer1 = [[Computer alloc]init];
// per.computer = [computer1 autorelease];
// [per release];
per.name = [NSString stringWithFormat:@"abc"];//retaincount = 2
per.name = [NSString stringWithFormat:@"bcd"];//2
per.name = nil;//没有
//对象的内存什么时候释放?
*/
Observer *ob = [[Observer alloc]init];
NSArray *array = @[@"keyword"];
[array writeToFile:@"/Users/wangzheng/Desktop/classSeven.txt" atomically:YES];
NSArray *array1 = [NSArray arrayWithContentsOfFile:@"/Users/wangzheng/Desktop/classSeven.txt"];
NSLog(@"%@",array1);
//NSUserDefaults
[[NSUserDefaults standardUserDefaults]setObject:@"12345" forKey:@"account"];//将数据存入本地路径(移动设备路径)
BOOL succeed = [[NSUserDefaults standardUserDefaults]synchronize];
//获取到Document和Library
NSString *account = [[NSUserDefaults standardUserDefaults]objectForKey:@"account"];
NSLog(@"%@",account);
//数据持久化
//对象归档 NSKeyedArchiver NSKeyedUnarchiver
//网络请求 服务器
// 云 icloud
NSLog(@"Hello, World!");
}
return 0;
}