ios技能点总结和存取方法

存储方法是一个可以获得或者设置一个对象的属性值的实例方法

在Cocoa的术语中,一个检索对象属性值的方法提及为getter方法,或者”getter;”,一个改变对象属性值的方法提及为setter方法,或者“setter.”这些方法通常成对建立,提供获得或者设置对象属性值的API。

我们应该使用存储方法而不是直接存储状态数据因为他们提供了一个抽象的层。下面是存储方法所提供的两个好处:

  1. 我们不需要重写我们的代码如果一个描述或者存储属性的方法改变。
  2. 存储方法常常实现重要行为是无论何时一个值被检索或者设置都会被重现。例如,设置方法频繁的实现内存管理代码并且通知其他对象当一个值被改变的时候。

命名规则

给出一个属性的类型type和称呼name,我们应该通过下面的格式,典型的实现存储方法:

-(type)name;
-(void)setName:(type)newName;

有个例外是属性为Boolean值。getter方法名字应该是isName。例如:

-(BOOL)isHidden;
-(void)setHidden:(BOOL)newHidden;

这种命名惯例很重要因为在Cocoa中的很多其他的功能都依赖它,特别的key-value coding。Cocoa不使用getName因为以get开始的方法表明方法返回引用类型的值。


(w) 报错:__NSCFString containsString:]: unrecognized selector sent to instance 0x7f876b79e160

原因:因为该属性提前释放了。

(w) 报错:This application is modifying the autolayout engine from a background thread

原因:把需要更新UI的放在的主线程就好了。(通过打印 [NSThreadcurrentThread],就可以知道当前不是在主线程;

NSDictionary *dict = [[NSDictionary alloc] initWithObjectsAndKeys:@”value1”, @”key1”, @”value2”, @”key2”, nil];

(w) Dealloc 时取 weak self 时崩溃 (http://blog.csdn.net/kaihaodir/article/details/51586616)
先上引起崩溃的代码:

- (void)dealloc
{
    __weak __typeof(self)weak_self = self;
    NSLog(@"%@", weak_self);
}

说明不允许在 dealloc 的时候取 weak self.

获取当前年份和月份和天数

NSCalendar *calendar = [NSCalendar currentCalendar];
unsigned unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit |  NSDayCalendarUnit;
NSDateComponents *components = [calendar components:unitFlags fromDate:[NSDate date]];
NSInteger iCurYear = [components year];  //当前的年份
NSInteger iCurMonth = [components month];  //当前的月份
NSInteger iCurDay = [components day];  // 当前的号数

根据传入的年份和月份获得该月份的天数

/**  
 * 根据传入的年份和月份获得该月份的天数  
 *   
 * @param year  
 *            年份-正整数  
 * @param month  
 *            月份-正整数  
 * @return 返回天数  
 */    
public int getDayNumber(int year, int month) {    
    int days[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };    
    if (2 == month && 0 == (year % 4) && (0 != (year % 100) || 0 == (year % 400))) {    
        days[1] = 29;    
    }    
    return (days[month - 1]);    
}