mian.m
#import <Foundation/Foundation.h>
#import "Singleton.h"
#import "Login.h"
#import "User.h"
#import "Person.h"
#import "Dog.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
Singleton *single1 = [Singleton shareInstance];
single1.name = @"tom";
Singleton *single2 = [Singleton shareInstance];
NSLog(@"single2 = %@",single2.name);
Login *loginer1 = [[Login alloc] init];
[loginer1 loadData];
[loginer1 saveUserName];
User *user1 = [[User alloc] init];
[user1 loadUserName];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:@"lili" forKey:@"userName"];
[defaults synchronize];
NSString *name = [defaults objectForKey:@"userName"];
NSLog(@"name = %@",name);
Person *person = [[Person alloc] init];
[person setValue:@"sam" forKey:@"name"];
NSLog(@"name = %@",[person valueForKey:@"name"]);
person.age = 10;
NSLog(@"age = %@",[person valueForKey:@"age"]);
Dog *dog = [[Dog alloc] init];
[dog setValue:person forKey:@"master"];
[dog setValue:@"boss" forKeyPath:@"master.name"];
NSLog(@"%@",[dog valueForKeyPath:@"master.name"]);
[dog dogMasterName];
[dog setValue:@"good" forKey:@"dogHealth"];
[dog setValue:@"die" forKey:@"dogHealth"];
}
return 0;
}
Singleton.h
#import <Foundation/Foundation.h>
@interface Singleton : NSObject<NSCopying>
@property (nonatomic, copy) NSString *name;
+ (Singleton *)shareInstance;
@end
Singleton.m
#import "Singleton.h"
@implementation Singleton
static Singleton *instance = nil;
+ (Singleton *)shareInstance{
@synchronized(self) {
if (instance == nil) {
instance = [[Singleton alloc] init];
}
return instance;
}
}
@end
Login.h
#import <Foundation/Foundation.h>
@interface Login : NSObject
@property (nonatomic, copy) NSString *userName;
- (void)saveUserName;
- (void)loadData;
@end
Login.m
#import "Login.h"
#import "Singleton.h"
@implementation Login
- (void)saveUserName{
Singleton *singleton = [Singleton shareInstance];
self.userName = @"小神";
singleton.name = self.userName;
}
- (void)loadData{
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
NSString *name = [userDefaults objectForKey:@"userName"];
}
@end
User.h
#import <Foundation/Foundation.h>
#import "Login.h"
@interface User : NSObject
@property (nonatomic, retain) Login *loginer;
- (void)userName:(Login *)loginer;
- (void)loadUserName;
@end
User.m
#import "User.h"
#import "Singleton.h"
@implementation User
- (void)userName:(Login *)loginer{
NSLog(@"login name = %@",loginer.userName);
}
- (void)loadUserName{
Singleton *singleton = [Singleton shareInstance];
NSLog(@"singleton name = %@",singleton.name);
}
@end
Person.h
#import <Foundation/Foundation.h>
@interface Person : NSObject
@property (nonatomic, copy) NSString *name;
@property (nonatomic, assign) NSInteger age;
- (void)test;
@end
Person.m
#import "Person.h"
@implementation Person
- (void)test{
NSLog(@"%@",_name);
}
@end
Dog.h
#import <Foundation/Foundation.h>
#import "Person.h"
@interface Dog : NSObject
@property (nonatomic, retain) Person *master;
@property (nonatomic, copy) NSString *dogHealth;
- (void)dogMasterName;
@end
Dog.m
#import "Dog.h"
@implementation Dog
- (instancetype)init
{
self = [super init];
if (self) {
[self addObserver:self forKeyPath:@"dogHealth" options:NSKeyValueObservingOptionNew |NSKeyValueObservingOptionOld context:nil];
}
return self;
}
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context{
NSLog(@"object = %@,change = %@",object,change);
if ([change[@"new"] isEqualToString:@"die"]) {
NSLog(@"报警");
}
}
- (void)dogMasterName{
NSLog(@"%@",self.master.name);
}
- (void)dealloc
{
[self removeObserver:self forKeyPath:@"dogHealth"];
[super dealloc];
}
@end