IOS 學習筆記

2013-05-16

   1、dealloc調用時機,正常情況下是在引用計數爲0時,系統會自動調用。但是有意外,就是在對象中開啓新的線程並且沒有執行完的時候,即使引用計數爲0也不會被調用。比如開啓NSTimer、GCD開啓新的線程……

   2、viewWithTag到底有多深?根據tag可以獲得的子View不只是兒子層,還包括孫子,甚至曾孫子,也就是所有。

This method searches the current view and all of its subviews for the specified view.

   3、UIImageView的userInteractionEnabled屬性默認值是NO,所以在它上面添加按鈕之類的子view時要注意設置它的值爲YES。

       This property is inherited from the UIView parent class. This class changes the default value of this property to NO.

2013-05-23

   1、創建plist文件,並寫入讀出

其中XXXXXX代表NSString、NSArray、NSDictionary、NSData。

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *path = [paths objectAtIndex:0];
NSLog(@"path = %@", path);
NSString *fileName = [path stringByAppendingPathComponent:@"fileName.plist"];
NSFileManager *fileManager = [NSFileManager defaultManager];
if (![fileManager fileExistsAtPath:fileName]) {
    [fileManager createFileAtPath:fileName contents:nil attributes:nil];
}
// 寫入
[xxx writeToFile:fileName atomically:YES];
// 讀出
XXXXXX *xxx = [XXXXXX xxxxxxWithContentsOfFile:filename];

   解釋一下writeToFile:atomically:方法中atomically參數的意義:如果爲YES則保證文件的寫入原子性,就是說會先創建一個臨時文件,直到文件內容寫入成功再導入到目標文件裏;如果爲NO,則直接寫入目標文件裏。

2013-05-24

   1、判斷當前網絡是何運行商,首先導入CoreTelephony.framework

#import <CoreTelephony/CTTelephonyNetworkInfo.h>
#import <CoreTelephony/CTCarrier.h>
typedef enum {
    TelNetworkInfoErr,// 不是運行商,可能是wifi甚至是無網絡
    TelNetworkInfoMobile,// 移動
    TelNetworkInfoUnicom,// 聯通
    TelNetworkInfoTelecom// 電信
}TelNetworkInfo;
- (TelNetworkInfo)getTelNetworkInfo {
    CTTelephonyNetworkInfo *info = [[CTTelephonyNetworkInfo alloc] init];
    CTCarrier *carrier = [info subscriberCellularProvider];
    if (carrier == nil) {
        [info release];
        return TelNetworkInfoErr;
    }
    NSString *code = [carrier mobileNetworkCode];
    if ([code isEqualToString:@"00"] || [code isEqualToString:@"02"] || [code isEqualToString:@"07"]) {
        [info release];
        return TelNetworkInfoMobile;
    }
    if ([code isEqualToString:@"01"]|| [code isEqualToString:@"06"]) {
        [info release];
        return TelNetworkInfoUnicom;
    }
    if ([code isEqualToString:@"03"]|| [code isEqualToString:@"05"]) {
        [info release];
        return TelNetworkInfoTelecom;
    }
    [info release];
    return TelNetworkInfoErr;
}

2013-5-29

   1、OC動態特性

  • 動態類型(Dynamic typing)運行時才決定對象的類型,簡單的說就是id類型(可以指向任何類型的指針或者可以理解爲指向任何未知類型的指針)。

  • 動態綁定(Dynamic binding)基於動態類型,在某個實例確定後,其類型便被確定了,該對象的屬性和響應的對象的屬性和響應的消息也被完全確定了。

  • 動態加載(Dynamic loading)根據需求加載所需要的資源,如圖片。

   2、Frame、Bounds和Center的區別和聯繫

  • Frame 描述當前視圖在其父視圖中的位置和大小

  • Bounds 描述當前視圖在其自身座標系統中的位置和大小

  • Center 描述當前視圖的中心在其父視圖中的位置

   三個屬性都是相互關聯的相互影響的,其中要改變了,其他的屬性也會改變。對視圖進行旋轉、縮放也都是相對於Center進行操作的。

2013-6-2

   1、ios中獲取一個唯一的字符串(利用UUID)

- (NSString *)getUniqueStrByUUID {
    CFUUIDRef uuidRef = CFUUIDCreate(NULL);
    CFStringRef uuidStrRef= CFUUIDCreateString(NULL, uuidRef);
    CFRelease(uuidRef);
    NSString *retStr = [NSString stringWithString:(NSString *)uuidStrRef];
    CFRelease(uuidStrRef);
    return retStr;
}

   

   2、ios判斷系統版本

#define iPhone5 ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(640, 1136), [[UIScreen mainScreen] currentMode].size) : NO)
// 用時候直接
if (iPhone5)
    do something

   另外,如果代碼寫界面的話,在iPhone5下View的高是568



期待下次更新……


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章