OC高效率52之尽可能使用不可变对象

#import <Foundation/Foundation.h>

@interface EOCPointOfInterest : NSObject
/**
 *  1.在编程实践中,则应该尽可能把对外公布出来的属性设为只,读,并且只在确有必要时才将属性对外公布
 *  2.不可变的类,须要把全部属性声明为readonly
 *  3.对象外部,仍能经过“键值编码设置属性值kvc” [pointOfInterest setValue:@"abc" forkey:@"identifier"]
 */
@property (nonatomic , copy , readonly) NSString *identifier;
@property (nonatomic , copy , readonly) NSString *title;
@property (nonatomic , assign , readonly) float latitude;
@property (nonatomic , assign , readonly) float longitude;
-(id) initWithIdentifier:(NSString *)identifier
                   title:(NSString *)title
                latitude:(float)latitude
               longitude:(float) longitude;
@end
#import "EOCPointOfInterest.h"

@implementation EOCPointOfInterest

@end
#import "EOCPointOfInterest.h"
/**
 *  在分类中把属性扩展为读写
 */
@interface EOCPointOfInterest (EOCPointOfInterest)

@property (nonatomic , copy , readwrite) NSString *identifier;
@property (nonatomic , copy , readwrite) NSString *title;
@property (nonatomic , assign , readwrite) float latitude;
@property (nonatomic , assign , readwrite) float longitude;
@end
#import "EOCPointOfInterest+EOCPointOfInterest.h"

@implementation EOCPointOfInterest (EOCPointOfInterest)

@end
#import <Foundation/Foundation.h>

@interface EOCPerson : NSObject
@property (nonatomic , copy , readonly) NSString *firstName;
@property (nonatomic , copy , readonly) NSString *lastName;
@property (nonatomic , strong , readonly) NSSet *friends;

-(id)initWithFirstName:(NSString *)firstName
           andLastName:(NSString *)lastName;

-(void)addFriend:(EOCPerson *)person;
-(void)removeFriend:(EOCPerson *)person;
@end
#import "EOCPerson.h"
@interface EOCPerson ()
@property (nonatomic , copy , readwrite) NSString *firstName;
@property (nonatomic , copy , readwrite) NSString *lastName;
@end


@implementation EOCPerson
{
    NSMutableSet *_internalFriend;
}
-(NSSet *)friends{
    return [_internalFriend copy];
}
-(void) addFriend:(EOCPerson *)person{
    [_internalFriend addObject:person];
}
-(void) removeFriend:(EOCPerson *)person
{
    [_internalFriend removeObject:person];
}
-(id)initWithFirstName:(NSString *)firstName andLastName:(NSString *)lastName{

    if ((self = [super init])){
        _firstName = firstName;
        _lastName = lastName;
        _internalFriend = [[NSMutableSet alloc]init];
    
    }
    return self;
}
@end
相关文章
相关标签/搜索