Just My Life & My Work

Archive for the ‘Objective C’ Category

[iOS] 混編Objective C、Swift、C/C++

在Swift剛釋出沒多久,我就研究過如何在同專案整合Objective C和Swift。文章:

儘管還是傾向以Objective C來開發產品,然而Swift的發展日趨重要,不過我大膽推測,就算Apple再怎麼強推Swift,十年內Objective C領導地位依然屹立不搖!為什麼呢?實際接觸4年Swift後,發現Swift變化多端,若猶豫要學Swift還是Objective C可以參考:要學Objective-C還是Swift?

現在想要混編Objective C、Swift、C/C++,應也不是問題~

[iOS] 混編Objective C、Swift、C:C++.png

(繼續閱讀…)

[Xcode] 例外中斷點 (Exception Breakpoint)

Xcode中使用Breakpoint來debug是非常平常的事情,優秀的我們都能從Breakpoint來得知上下文狀態,如各個變數值。有時候崩潰(Crash)來得突然,Xcode沒有提供詳細的Crash訊息,像是我這個例子是:存取Empty Array

[Xcode] 例外中斷點 (Exception Breakpoint)2

此時例外中斷點 (Exception Breakpoint)就非常好用!

(繼續閱讀…)

[Objective C] 溝通模式 (Communication Patterns)

學寫iOS App已經滿三年,回想那時候還是iOS 6,而如今再過兩個月就要邁入iOS 9,這個作業系統隨著時間持續進化,多數基礎機制沿用至今。儘管已會獨立寫出一個App,然而在Objective C技術上還是有待精進,比如用來傳遞訊息或資料的溝通模式 (Communication Patterns),我也僅熟悉某幾種,其機制的概念與優劣尚未明朗,於是想趁著昌鴻颱風給放假的時候,來瞭解一下這五種溝通模式:

  • KVO (Key-Value Observing)
  • Notifications
  • Delegation
  • Blocks
  • Target-Action

Communication Patterns

(繼續閱讀…)

圖片

[Objective C] 快速參考表 (Quick Reference)

一張好的快速參考表 (Quick Reference),勝過讀一本3公斤的工具書!當然這是要在有基礎的情況之下,而你突然失憶的時候,這張表才能發揮其價值!

雖然現在大家開始去學Apple公開的新語言Swift,但發展超過20年的Objective-C,在未來十年內我個人認為還不會被取代,所以想寫iOS APP的新朋友還是可以放心學習啦~

Objective-C-Cheat-sheet-v15

點開可以看放大的原始圖喔!該作者在其網站上也有非常豐富的教學文章,無論是新手還是老手,都可以盡情去挖寶喲:P~

參考:Objective-C Cheat Sheet and Quick Reference

[iOS] 測試記憶體

自己是在iOS已經出現ARC機制的時候學習iOS程式設計,以為可以再也不用在乎記憶體管理,只要專注在應用程式功能上的開發即可,然而這一路以來的開發過程告訴我,記憶體管理依然非常重要,縱使我有無限制的記憶體,但在程式邏輯上會牽扯到記憶體運作,儘管我能順暢地寫完功能,執行後可能不是我想要的結果!

(繼續閱讀…)

[Objective C] 多重排序 (Multiple Sort)

剛好用到多重排序 (Multiple Sort),於是就來練習一下,沒想到Objective C都幫我寫好了!我只要會用就好⋯⋯還記得當時寫C/C++的ACM題目,bug殺好久~知道怎麼實作之後,拿來用更有感覺:)~

(繼續閱讀…)

[iOS] NSDate

原本以為獲取日期和時間的方法很簡單,沒想到它是如此深奧,我查詢一些跟NSDate相關的API用法,只要掌握幾個簡單的原則,就可運用自如。像是由 NSDate 轉換為 NSString,和由 NSString 轉換為 NSDate

(繼續閱讀…)

[Objective C] writeToFile 寫入檔案

一直想知道如何在Objective C將資料寫入檔案,沒想到只是一個方法writeToFile就可以完成!比較讓我訝異的是,Objective C不像C語言,是寫到txt檔,反而是寫成xml檔

哈~突然讓我想到我們系上那個教xml的教授,我一直不敢去上他的課,害怕浪費時間和金錢,只是為了那三個學分~為什麼?我想要學到東西!

(繼續閱讀…)

[Objective C] NSNumber

來練習數值物件NSNumber吧!

(繼續閱讀…)

[Objective C] NSMutableArray

對應NSArray,接著來練習NSMutableArray!屬於可變 (mutable) 的物件種類,裡頭可以放任何的型態的物件。

常用方法如下:

  • -(void) addObject: (id) anObject
    將 anObject 加入陣列
  • -(void) removeObject: (id)anObject
    將陣列內所有符合 anObject 的物件刪除
  • -(void) sortUsingSelector: (SEL) comparator
    以 comparator 的方法,將陣列的元素加以排序
  • -(void) replaceObjectAtIndex: (NSUInteger) index withObject: (id) anObject
    將陣列索引值為 index 的元素取代為 anObject
  • -(void) exchangeObjectAtIndex: (NSUInteger) idx1 withObjectAtIndex: (NSUInteger) idx2
    將陣列索引值為 idx1 與 idx2 的元素調換

範例程式碼:


//
//  main.m
//  HappyMan's Program - NSMutableArray
//  Xcode 4.5
//  Created by ShengWen on 12/9/26.
//  Copyright (c) 2012年 ShengWen. All rights reserved.
//  https://cg2010studio.wordpress.com/

#import <Foundation/Foundation.h>
@interface monster : NSObject
{
    int life;
}
@property int life;
-(void) show;
@end

@interface posion : NSObject
{
    int cure;
}
@property int cure;
-(void) show;
@end

@implementation monster
@synthesize life;
-(void) show{
    NSLog(@"life = %i",life);
}
@end

@implementation posion
@synthesize cure;
-(void) show{
    NSLog(@"cure = %i",cure);
}

@end

int main (int argc, const char * argv[]) {

    monster* lion1 = [[monster alloc] init];
    monster* lion2 = [[monster alloc] init];
    monster* lion3 = [[monster alloc] init];
    posion* red1 = [[posion alloc] init];
    posion* red2 = [[posion alloc] init];
    posion* red3 = [[posion alloc] init];
    NSMutableArray* mArray = [[NSMutableArray alloc] init];

    lion1.life = 99;
    lion2.life = 199;
    lion3.life = 299;
    red1.cure = 49;
    red2.cure = 149;
    red3.cure = 249;

    // 將物件加入陣列中
    [mArray addObject:lion1];
    [mArray addObject:lion2];
    [mArray addObject:lion3];
    [mArray addObject:red1];
    [mArray addObject:red2];
    [mArray addObject:red3];

    // 使用陣列內物件的方法
    NSLog(@"使用物件方法:");
    [mArray makeObjectsPerformSelector:@selector(show)];

    // 刪除物件
    NSLog(@"刪除物件:");
    [mArray removeObject:red2];
    [mArray makeObjectsPerformSelector:@selector(show)];

    // 取代物件
    NSLog(@"取代物件:");
    [mArray replaceObjectAtIndex:2 withObject:red3];
    [mArray makeObjectsPerformSelector:@selector(show)];

    // 對調物件
    NSLog(@"對調物件:");
    [mArray exchangeObjectAtIndex:0 withObjectAtIndex:2];
    [mArray makeObjectsPerformSelector:@selector(show)];

    return 0;
}

執行結果:

2012-10-04 23:51:42.926 HappyMan’s First Program[8898:403] 使用物件方法:

2012-10-04 23:51:42.928 HappyMan’s First Program[8898:403] life = 99

2012-10-04 23:51:42.929 HappyMan’s First Program[8898:403] life = 199

2012-10-04 23:51:42.929 HappyMan’s First Program[8898:403] life = 299

2012-10-04 23:51:42.930 HappyMan’s First Program[8898:403] cure = 49

2012-10-04 23:51:42.930 HappyMan’s First Program[8898:403] cure = 149

2012-10-04 23:51:42.931 HappyMan’s First Program[8898:403] cure = 249

2012-10-04 23:51:42.931 HappyMan’s First Program[8898:403] 刪除物件:

2012-10-04 23:51:42.932 HappyMan’s First Program[8898:403] life = 99

2012-10-04 23:51:42.932 HappyMan’s First Program[8898:403] life = 199

2012-10-04 23:51:42.933 HappyMan’s First Program[8898:403] life = 299

2012-10-04 23:51:42.933 HappyMan’s First Program[8898:403] cure = 49

2012-10-04 23:51:42.934 HappyMan’s First Program[8898:403] cure = 249

2012-10-04 23:51:42.934 HappyMan’s First Program[8898:403] 取代物件:

2012-10-04 23:51:42.935 HappyMan’s First Program[8898:403] life = 99

2012-10-04 23:51:42.935 HappyMan’s First Program[8898:403] life = 199

2012-10-04 23:51:42.936 HappyMan’s First Program[8898:403] cure = 249

2012-10-04 23:51:42.936 HappyMan’s First Program[8898:403] cure = 49

2012-10-04 23:51:42.937 HappyMan’s First Program[8898:403] cure = 249

2012-10-04 23:51:42.937 HappyMan’s First Program[8898:403] 對調物件:

2012-10-04 23:51:42.938 HappyMan’s First Program[8898:403] cure = 249

2012-10-04 23:51:42.940 HappyMan’s First Program[8898:403] life = 199

2012-10-04 23:51:42.940 HappyMan’s First Program[8898:403] life = 99

2012-10-04 23:51:42.941 HappyMan’s First Program[8898:403] cure = 49

2012-10-04 23:51:42.942 HappyMan’s First Program[8898:403] cure = 249

話說,輸出明明就很少,結果大部分的內容都是時間加上專案名稱,下次該把這部分給刪除掉~

參考:Objective-C 陣列物件NSMutableArray Class ReferenceObjective-C 入門指南 – NSMutableArray

標籤雲

%d 位部落客按了讚: