Debian 64位元下執行32位元應用

debian 64位元下執行32位元應用

在Linux 64位元下要執行32位元程式只要安裝32位元相關的函數庫就可以正常執行,所以要先將原本只有64位元模式再加上32位元模式,這個對於Debian來說叫arch,一個系統中可以存在多個arch,這種的叫multiarch,所以利用dpkg將要加入的arch加入,這次需要加的是32位元模式,在命令上面要加入i386

dpkg –add-architecture i386 # enable multi-arch

(繼續閱讀…)

 目錄管理(Create/Copy/Move/Remove/Attribute)

目錄管理(Create/Copy/Move/Remove/Attribute)

NSFileManager 照名稱當然也是提供最基本目錄管理:拷貝、移動、刪除功能,以上這些與檔案管理其實是類似的,目錄管理增加了一項建立目錄的功能,當然也會依照路徑表示方式,使用2種方式介紹。

傳統路徑表示

傳統路徑所代表的就是一般路徑表示,Mac是使用Unix的路徑表示方式。

建立目錄 Create

建立目錄時,必需要注意withIntermediateDirectories這個傳入的值,當YES,不管您指定的目錄名稱中間的目錄是否存在,它都會自動不存在的目錄並將所有目錄建立完成,例如,當我要建立目錄名稱為dir1,並且指定的路徑是/tmp/dira/dir1,中間的dira目錄並不存在,但指定withIntermediateDirectories: YES就會先建立dira再建立dir1,反之只要建立目錄過程碰到 路徑本身不存在或您指定的目錄已經存在 時就會停止建立並返回建立失敗值為NO

//-----------start-----------
NSFileManager *filemanager;

filemanager = [NSFileManager defaultManager];

if ([filemanager createDirectoryAtPath: @"/tmp/dir1" withIntermediateDirectories: YES attributes: nil error: NULL]  == YES)
        NSLog (@"建立成功!");
else
        NSLog (@"建立失敗!");

//------------end------------

(繼續閱讀…)

 檔案管理(Copy/Move/Remove)

檔案管理(Copy/Move/Remove)

NSFileManager 照名稱當然也是提供最基本檔案管理:拷貝、移動、刪除功能,接下來依照路徑表示方式,使用2種方式介紹。

傳統路徑表示

傳統路徑所代表的就是一般路徑表示,Mac是使用Unix的路徑表示方式。

拷貝檔案 Copy

//-----------start-----------
NSFileManager *filemanager;

filemanager = [NSFileManager defaultManager];

if ([filemanager copyItemAtPath: @"/tmp/file.txt" toPath: @"/tmp/newfile.txt" error: NULL]  == YES)
        NSLog (@"拷貝成功!");
else
        NSLog (@"拷貝失敗!");

//------------end------------

(繼續閱讀…)

 mutable VS immutable

mutable VS immutable

可變 與 不可變 類別

Objective-C在Fundation Framework中提供了 可變類別(mutable)不可變類別(immutable),依字面來說,不可變類別即是物件宣告時就給予初始值內容,其內容無法去修改,如果用方法所產生與原先不同的內容時,其方法都會將物件重新建立後再取代原先物件。

不可變類別

舉個例子來說,Java在字串中也有 StringStringBuilder 這兩種方式,以 StringBuilder 就是指可變類別(mutable),下面以NSString例子來看一下不可變類別:

//-----------start-----------
    NSString *str = @"danny";
    NSLog(@"%@",str);
    str = [str stringByAppendingString:@" is danny"];
    NSLog(@"%@",str);
//------------end------------

程式中看的出來第一次初始值為danny,之後再將它加入is danny,但在不可變的底層來說:

  • 第一次建立 danny 指向str
  • 第二次建立 danny is danny 指向str並刪除第一次建立的danny

    (繼續閱讀…)

 國曆轉農曆

國曆轉農曆

NSCalendar支援幾種國家的曆法後,國曆轉農曆的轉換就相當的方便!範例是將日期1979-12-03轉為農曆,轉換之前將日期轉入NSDate再將NSCalendar設定成中國曆法(NSChineseCalendar),使用NSDateComponents物件處理一下,之後就是以農曆為單位的結果。

//-----------start-----------
    NSDateFormatter *dateFormatter1 = [[NSDateFormatter alloc] init];
    [dateFormatter1 setDateFormat:@"yyyy-MM-dd"];
    NSDate *startingDate = [dateFormatter1 dateFromString:@"1979-12-03"];
    //
    NSCalendar* calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSChineseCalendar];

    NSUInteger unitFlags = NSMonthCalendarUnit | NSYearCalendarUnit | NSDayCalendarUnit;
    NSDateComponents *dateComponents = [calendar components:unitFlags fromDate:startingDate];
    //
    NSInteger days     = [dateComponents day];
    NSInteger months   = [dateComponents month];
    NSLog(@"Date 1979-12-03 to NSChineseCalendar %d / %d",months,days);
//------------end------------

輸出結果:

2013-03-29 13:39:23.022 testa1[50546:c07] Date 1979-12-03 to NSChineseCalendar 10 / 14

 計算2個日期間隔時間

計算2個日期間隔時間

計算2個時間的間隔多久不需要自行寫程式計算,只要使用 NSDateComponents 這個物件,再配合幾個物件:

  • NSCalendar
  • NSDateFormatter
  • NSDate

範例中是要計算從1979-12-03起至2013-03-29間隔時間共是多久,所以我們需要有2個時間點,開始的時間點使用NSDate並指定日期表示,再建立結束的時間點,有2個時間點之後,我們要使用NSCalendar設定為NSGregorianCalendar曆別。全部都準備到位之後,再由NSDateComponents計算2個時間的間隔: (繼續閱讀…)