Effective Objective-C 2.0学习记录(二)

对于NSString,NSNumber,NSArray,NSDictionary使用字面语法

NSString *str = "Lawrence"; 
//优于
NSString *str = [[]NSString alloc] initWithString:@"Lawrence"];

NSNumber *one = @1; 
//优于 
NSNumber *one = [NSNumber numberWithInteger: 1];

NSArray *array = @[@"one", @"two", @"three"];
NSDictionary *dictionary = @[@"firstKey": @"first", @"secondKey": @"second", @"thirdKey": @"third"];

数组和字典中的数值不可以有nil值。
使用字面量语法创建出来的对象,是不可变的(immutable),如果想要可变的版本,需要拷贝一份,

NSMutableArray *mutableArray = [@[@1, @2, @3, @4] mutableCopy];

尽量不用#define去定义常量,尽量不要在头文件中定义常量
const仅仅用来修饰右边的变量(基本数据变量p,指针变量*p)

使用枚举变量表示状态,选项,状态码

属性特质
1.原子性,atomic/nonatomic,原子性,在并发编程中,如果某操作具备整体性,系统其他部分无法查看其中间过程的临时结果,只能看到初始值和结束值,那么这个操作就是原子性的
通过加锁,确保原子性。在iOS中,atomic使用会有较大的性能开销,也不能完成确保线程安全。
2.读/写权限, readwrite和readonly
3.内存管理语义

a) assign,设置方法,只针对scalar type(如CGFloat, NSInteger等)

b) strong,拥有关系,为这种属性设置新值后,设置方法会先保留新值,并释放旧值,然后再将新值设置上去

c) weak,非拥有关系,设置新值时,既不保留新值,也不释放旧值。属性所指对象被destroy时,属性值也会情况(nil out)

d) unsafe_unretained

e) copy,拥有关系,设置方法并不保留新值,而是拷贝新值。当属性类型为NSString时,经常使用此特性保证其封装性。
4.方法名,getter=

很简单,假如有一个NSMutableString,现在用他给一个retain修饰 NSString赋值,那么只是将NSString指向了NSMutableString所指向的位置,并对NSMUtbaleString计数器加一,此时,如果对NSMutableString进行修改,也会导致NSString的值修改,原则上这是不允许的. 如果是copy修饰的NSString对象,在用NSMutableString给他赋值时,会进行深拷贝,及把内容也给拷贝了一份,两者指向不同的位置,即使改变了NSMutableString的值,NSString的值也不会改变.所以用copy是为了安全,防止NSMutableString赋值给NSString时,前者修改引起后者值变化而用的.

扫描二维码关注公众号,回复: 117761 查看本文章

在对象内存尽量直接访问实例变量,属性访问,self.instance,直接访问,_instance
读取时使用直接访问,写入数据是使用属性访问
懒加载,必须通过属性访问

- (Person *)person {
    if (!_person) {
        _person = [Person new];
        ...
    }
    return _person;
}

对象等同性,

//You need to implement -isEqual: and -hash methods for your Request class.
-(BOOL)isEqualTo:(Object *)object;  -(NSUInteger)hash;

猜你喜欢

转载自www.cnblogs.com/horo/p/8998624.html