2013年12月10日 星期二

iPhone 5s開箱


歷經了許多天等待種花的預約單號後,終於在11月21拿到了期待已久的新手機,原本的iPhone 4s可以功成身退了~

看圖吧












有了手機當然要搭配官方出的保護配件,手感摸起來很棒,安裝的時候也不會去損害到手機本身,可以說是CP值很高的商品,這次搭配的是紅色的版本,一起為杜絕愛滋。











下一次的iPhone開箱要等兩年了,不過最近的iPad Air在台灣要上市了歐,據說是12/13日,一起期待到時候會不會有開箱吧。


2013年3月24日 星期日

巢狀結構(nested structure)

往後會很遇到這樣的structure,例:
apple早已定義好很多structure,要知道怎麼用要查documentation。



結構(structure)

structure 結構:定義新的資料類型,可將不同的資料類型綁在一起,成為新的資料類型。
typedef:更改資料類型的名稱。

原本的:

struct student{
    char name[20];
    int chinese;
    float english;
    float math;
};


struct student stu1={"Mary",80,60.4,39.0};
更改後的:




typedef struct student{
    char name[20];
    int chinese;
    float english;
    float math;
}stu;

stu stu1={"Mary",80,60.4,39.0};
如此可以少打一些字。






指標&陣列

此範例之前就有介紹過,這邊加上指標,但其結果是一樣的

int sumOfArray(int* a,int num);
之前傳進去的是a[],這次傳進去的是point。

sum+=*(a+i);
之前用的是a[],但這個範例用的是指標*後面接的是記憶體實際的位置。
我可以加上NSLog(@"*(a+i)=%x",*(a+i));來輸出看看。
結果我們發現輸出的結果確實回記憶體位置。


2013-03-24 22:38:49.970 pointer&array[20281:303] *(a+i)=a
2013-03-24 22:38:49.972 pointer&array[20281:303] *(a+i)=14
2013-03-24 22:38:49.973 pointer&array[20281:303] *(a+i)=1e
2013-03-24 22:38:49.974 pointer&array[20281:303] *(a+i)=28
2013-03-24 22:38:49.976 pointer&array[20281:303] *(a+i)=32
2013-03-24 22:38:49.977 pointer&array[20281:303] sum=150





指標

最簡單的point

2013年3月22日 星期五

有傳參數的function

前幾篇學了沒有傳函數的function陣列,有了這些概念之後我們就可以學習有傳參數的function,我們用簡單的程式跟大家說明。
首先我們就以宣告->定義->實作三個階段來看


int sumOfArray(int a[],int num);
宣告有傳值且資料形態為int,有兩個傳入function的值,分別為資料形態為int的陣列跟資料形態為int的變數。

int sumOfArray(int a[],int num){
    int sum=0;
    
    for (int i=0; i<num; i++) {
        sum+=a[i];
    }
    return sum;
}


定義的部分就是宣告有什麼照複製就對了不一樣的是宣告後面是;結尾,定義後面還要有{},說明裡面的內容。

sum=sumOfArray(a, num);
實作的部分因為宣告時有說明會有回傳值,所以要有個變數去儲存回傳的值,所以sum為儲存的變數,接收在定義裡return回來sum的值。

sumOfArray(a, num);
這裡要特別注意,要傳入值的資料形態必須與宣告時的資料形態相同。


其實function的參數傳遞不難,只要把握三個步驟,資料形態相同這兩個原則就可以了。

陣列位置

在前一篇陣列(array),有提到陣列就是宣告一個記憶體區塊皆為相同資料形態的工具,接下來我們就是要來驗證一下是否正確。
所以我們就來撰寫一個讀取陣列記憶體位置的程式,如下。
程式執行的時候會有警告的模式,但不影響執行結果。

NSLog(@"a[%i]=%x",i,&a[i]);這行程式碼是在輸出a[0]~a[4]的記憶體位置。
%i宣告要輸出的資料形態為整數,%x宣告要輸出的是address。
NSLog(@"a=%x",a);這行程式碼是在輸出a這個變數的address,我們可以發現他的address跟a[0]是一模一樣的,我們畫個圖會更清楚。
由圖可知,當我們宣告記憶體時會先宣告一個變數名稱為a、資料形態為int、4bytes的空間裡面存放的是a[0]的address,所以我們印出a的address時會跟a[0]的相同。


陣列的概念很重要歐!!

陣列(array)

所謂陣列就是宣告一個記憶體區塊皆為相同資料形態的工具,好處就是我們可以一次宣告多個相同資料類型的變數,以下用簡單的程式碼說明。

int a[]={10,20,30,40,50};這個宣告陣列的其中一種方式,以下列出的是用for迴圈宣告陣列的方法。

int a[4];
for (int i=0; i<5; i++) {
    a[i]=i;
}
會利用for迴圈宣告可能是輸入的值很多或是其他原因。
值得注意的是陣列的起始值為0,也就是說是從a[0]開始擺放,所以在用for迴圈的時候要特別注意!!


total+=a[i];這段值得一提的是原本我們會這樣輸入total=total+a[i];不過為了簡寫就可以用+=這種方式,大部份的programmer也都會這樣做。


這些就是陣列要注意的地方,當然還有二維陣列,甚至多維陣列,不過不常用所以就不提了,原理跟一維陣列相同。

沒有傳參數的函數(Function)、for迴圈

函數其實很簡單,最主要的精神就是重複做相同的事情,也就是說當有個動作要執行很多遍的時候用函數是最快的方式。
for迴圈其實跟function差不多,不過for常用來計數,輸入陣列值等...
接下來就用九九乘法表來介紹函數。
首先要建立基本觀念

void printstar(void);這行是在宣告function。


void printstar(void){
   
}這段是在定義function。


printstar();這行是在實作function。
所以function的流程就是宣告->定義->實作。




void printstar(void){
    for (int i=0; i<=48; i++) {
        printf("*");
    }
    printf("\n");
}

printstar這個function就是在列印星星,由於動作重複所以把它寫成function這樣要用到的時候就不用再寫一次,只要call function就可以。
因為這個範例的function不需要參數的傳遞,所以void(傳回值) printstar(void)(傳入值)都用void表示空的/沒有,之後會有範例是有用到參數傳遞的。


for (int i=1; i<=9; i++) {
    for (int j=1; j<=9; j++) {
        printf("%5i",i*j);
    }
    printf("\n");
}

這一段就是在輸出九九乘法表,"%5i"是為了要讓乘法表可以對齊,可以發現每個數字含前面的空格都剛好5的bytes,也就是說每個數字加空格佔5bytes。
如果我們不做對齊的話,則輸出的的東西會很難看。
這些就是最基本的function與for迴圈的程式範例。

2013年3月21日 星期四

區域變數與全域變數

接下來用一段小程式碼跟大家介紹區域和全域變數的差別
在此段程式碼有定義了兩個資料形態為int且名稱一樣的變數

int i=100;
int i=300;


而雖然說名稱一樣但是兩個變數的有效範圍卻差很多,以此程式碼為例。
i=100因為宣告在main外面,已經屬於最外層所以在任何地方都可以存取到i=100這個值。
i=300因為宣告在main裡面,所以它能存在的地方只有main裡面而已,出了main外面而i=300就無效了。

區域和全域的概念很重要

2013年3月20日 星期三

認識Objective-C四個基本資料形態

四個基本的基料形態為 int、float、double、char
以下是程式示範
特別的是float和double輸出的地方,我們給定的值有小數點,所以輸出的時候.xf來表示有表示輸出幾位小數點

NSLog(@"i=%i",i);可能會不太瞭解,但其實很簡單%前面的i=就是要輸出的文字,而%i則是告訴NSLog放在逗點後面變數的格式

如此一來我們就學會了四個基本資料形態,我們可以在這四個基本資料形態前面加上修飾詞,如(short、long、unsigned)

如果是加上short就把原本所佔的bytes數減半
如果是加上long就把原本所佔的bytes數乘2
如果是加上unsigned則是沒有負數

讓Xcode看起來更舒服

對許多人來說mac電腦上的文字會太小。

尤其是Xcode,若視力不好的人一定會覺得怎麼那麼小,看都看不清楚。

以下的範例就是要讓Xcode看起來比較舒服。

首先我們先進入Xcode的【偏好設定/Preferences】
進入後選擇【Fonts & Colors 】,進入後將中間顯示文字全選
文字全選後,點選圖中圓圈所標示的「T」字,即可調整字體大小、自行等...
這邊建議只要調大小即可,其餘的不用更改
下圖是將字體設為18的結果
為了程式觀看方便,我們也會選擇在程式碼旁邊標示第幾行
接下來我們要讓程式碼顯示行號
一樣點選Xcode的【偏好設定/Preferences】,選擇【Text Editing】,將「Line numbers」打勾
這樣一來字體變大了,程式碼也多了行號,以後要撰寫就更方便了

Xcode 建立新專案


要開發ios一定要學會Objective-C


首先先建立新專案
點選【Create a new Xcode project】

進入後選擇「OS X」下的「Application」,選擇【Command Line Tool】,按【Next】
填寫「Project Name」,將「Type」選擇「Foundation」,按【Next】
將專案儲存到你想要放的地方,點選【Create】
就會看到我們剛建立好的專案


首先接下來就要開始練習語法了,點選左側欄的「main.m」
點選一下即可,點兩下的話會跳出「main.m」的獨立視窗
我們可以先不用更改任何東西直接按下左上方【Run】鍵,就可以看到輸出

ipad mini開箱

廢話不多說看圖吧!!

























ipad mini真的很輕很小,很適合女生或是在車上看報紙網誌等,玩遊戲也不錯歐!