object c - rip

86
OBJECTIVE - C 1~ 413523목요일

Upload: dong-heon-cho

Post on 17-Aug-2015

218 views

Category:

Engineering


0 download

TRANSCRIPT

Page 1: Object C - RIP

OBJECTIVE - C1장 ~ 4장

13년 5월 23일 목요일

Page 2: Object C - RIP

XCODE 4.6.2 기준으로 작성13년 5월 23일 목요일

Page 3: Object C - RIP

들어가기 앞서서...

13년 5월 23일 목요일

Page 4: Object C - RIP

OBJECTIVE C를 하는 (개인적) 이유

•아이폰 앺 개발 짜응!

• ...포팅을 위하여! - 개발자라면 MAC, PC, LINUX 쯤은....???

•언어는 언어일뿐... 애플 망하지 마라!

13년 5월 23일 목요일

Page 5: Object C - RIP

진실은...

13년 5월 23일 목요일

Page 6: Object C - RIP

그래도 나는 OBJECTIVE C를 한다어헣허허허허허헣헣

13년 5월 23일 목요일

Page 7: Object C - RIP

OBJECTIVE C 차례

1장 iOS SDK 소개 및 프로그래밍 기본

2장 기본 자료형과 연산자

3장 제어문, 배열 및 구조체

4장 클래스, 객체 및 메시징

13년 5월 23일 목요일

Page 8: Object C - RIP

1장 IOS SDK 소개 및 프로그래밍 기본

13년 5월 23일 목요일

Page 9: Object C - RIP

1장 IOS SDK 소개 및 프로그래밍 기본

•개발을 위한 iOS SDK 다운로드

•개발자 문서 및 포럼 소개

•기본개념

• Xcode 기본

13년 5월 23일 목요일

Page 10: Object C - RIP

IOS SDK 다운로드http://developer.apple.com

13년 5월 23일 목요일

Page 11: Object C - RIP

IOS SDK 다운로드http://developer.apple.com

13년 5월 23일 목요일

Page 12: Object C - RIP

IOS SDK 다운로드http://developer.apple.com

13년 5월 23일 목요일

Page 13: Object C - RIP

IOS SDK 다운로드http://developer.apple.com

개발 프로그램은 무료!개발 프로그램 판매하고 싶으면 연99$

연99$... (날강도여)

13년 5월 23일 목요일

Page 14: Object C - RIP

IOS SDK 다운로드

• 참고 사이트라해

• developer.apple.com/library/ios/navigation/index.html(개발자 문서)

• 개발자 문서에서 아이폰 앱 개발 필요한 모든 내용 찾을 수 있다해 - 사실 개발자 문서만 보면 다------ 된다해

13년 5월 23일 목요일

Page 15: Object C - RIP

개발자 포럼

Apple Developer Forumshttp://devforums.apple.com/community/iOS - 돈 내야 됨+양키꺼

http://cafe.naver.com/mcbugi - 국내http://www.iphoneos.co.kr - 국내

13년 5월 23일 목요일

Page 16: Object C - RIP

프로그래밍 기본 개념

•Objective - C의 기반이 되는 프로그래밍 언어는 C

13년 5월 23일 목요일

Page 17: Object C - RIP

프로그래밍 기본 개념#include <stdio.h>

int main(void){

printf(“Hello World\n”);

return 0;}

13년 5월 23일 목요일

Page 18: Object C - RIP

프로그래밍 기본 개념#include <stdio.h>

int main(void){

int c=10; // 변수printf(“Hello World\n”);

return 0;}

13년 5월 23일 목요일

Page 19: Object C - RIP

프로그래밍 기본 개념#include <stdio.h>

int main(void){

int c=10; // 변수printf(“Hello World\n”);

return 0;}void hello(void) // 함수{ printf(“hello\n”); }

13년 5월 23일 목요일

Page 20: Object C - RIP

프로그래밍 기본 개념

13년 5월 23일 목요일

Page 21: Object C - RIP

프로그래밍 기본 개념

13년 5월 23일 목요일

Page 22: Object C - RIP

프로그래밍 기본 개념

체크 해제

13년 5월 23일 목요일

Page 23: Object C - RIP

프로그래밍 기본 개념

13년 5월 23일 목요일

Page 24: Object C - RIP

프로그래밍 기본 개념

13년 5월 23일 목요일

Page 25: Object C - RIP

프로그래밍 기본 개념//// main.m// HelloWorld//// Created by cho dong heon on 13. 4. 30..// Copyright (c) 2013년 cho dong heon. All rights reserved.//

#import <UIKit/UIKit.h>

#import "AppDelegate.h"

int main(int argc, char *argv[]){ NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; ! // HelloWorld의 실행 과정을 디버그 콘솔에 기록(Log hello world to the debugger console) NSLog(@"Hello World"); //Hello World 문자 출력! int retVal = UIApplicationMain(argc, argv, nil, nil);! [pool release];! return retVal; // 보통은 0, 0이 아니면 에러}

13년 5월 23일 목요일

Page 26: Object C - RIP

프로그래밍 기본 개념

NSLog 함수는 printf 함수처럼 문자열 출력

- printf는 c의 문자열, NSString은 NSString 클래스를 참조하는 객체의 문자열 출력(자세한 것은 나중에)

- NSLog는 디버거 콘솔에 문자열 출력 때 사용(아이폰 화면 ㄴㄴ)

13년 5월 23일 목요일

Page 27: Object C - RIP

프로그래밍 기본 개념#import <Foundation/Foundation.h>

int main(int argc, char *argv[]){ NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];//메모리 참조 수 계산 방식 ARC(Automatic Reference Count) [pool release]; @autoreleasepool //메모리 참조 수 계산 방식 ARC(Automatic Reference Count) { NSLog(@"Hello World!"); // 출력 NSLog(@"int : %i",10); // 정수 출력 NSLog(@"float : %.2f",0.1); // float 출력 NSLog(@"double : %f",3.14258); // double 출력 NSLog(@"c문자열 : %s","c hello"); // c문자열 출력 char a[10]=”hello” NSLog(@"NSString 오브젝트 문자열 : %@",@"objective hello"); // NSString 오브젝트 문자열 출력 NSString *string=@”hello” } printf("Hi! This is printf!"); return 0;}

13년 5월 23일 목요일

Page 28: Object C - RIP

프로그래밍 기본 개념

헤더 파일은 함수 혹은 메서드 원형들과 변수 선언을 포함- 확장자 ‘.h’

소스 파일은 함수 혹은 메서드와 변수를 구현- 확장자 ‘.m’

자세한 것은... 4장에서.

13년 5월 23일 목요일

Page 29: Object C - RIP

전처리기 지시자와 컴파일러 지시자

지시자?

13년 5월 23일 목요일

Page 30: Object C - RIP

전처리기 지시자와 컴파일러 지시자

지시자!

#include#import#define

etc..

13년 5월 23일 목요일

Page 31: Object C - RIP

전처리기 지시자와 컴파일러 지시자

전처리기 지시자는 명령어 ‘#‘키워드로 시작!- #import, #define

컴파일러 지시자는 명령어 ‘@‘키워드로 시작!- @interface, @implementation

13년 5월 23일 목요일

Page 32: Object C - RIP

전처리기 지시자와 컴파일러 지시자

Objective C는 #include ㄴㄴ #import !

13년 5월 23일 목요일

Page 33: Object C - RIP

전처리기 지시자와 컴파일러 지시자@interface, @implementation -> 컴파일러 지시자

- 나중에 이해하자...#import <Foundation/Foundation.h>#define GREETING @"Dawg"#define AGE 40@interface SayHello : NSObject{ NSString *test;}- (void) sayHello: (NSString *) name;@end

<SayHello.h>

#import "SayHello.h"@implementation SayHello- (void) sayHello: (NSString *) name // 함수 정의-name을 argument로 받는 함수{ NSLog(@"Hello %@, %@. Your are %i years old.",name,GREETING,AGE);}@end

<SayHello.m>

13년 5월 23일 목요일

Page 34: Object C - RIP

주석 & 포인터

<주석 쓰기>// 한줄짜리/* 여러줄짜리*/

<포인터 쓰기>int cubby=32;int *pointer=&cubby;

NSLog(“%i”,*pointer);//NSLog(“%i”,pointer); ㄴㄴ해

13년 5월 23일 목요일

Page 35: Object C - RIP

XCODE 기본Xcode는 애플 Mac OS X에서 사용하는 IDE(통합 개발 환경)

- iphone, ipad시뮬레이터도 있으예

13년 5월 23일 목요일

Page 36: Object C - RIP

2장 기본 자료형과 연산자

13년 5월 23일 목요일

Page 37: Object C - RIP

기본 자료형

•자료형 지정->필요한 메모리 용량 & 변수가 표현하는 값의 범위

• ex) int -> short int, unsigned int, long int ...

• ex) double, float..

• char a[ ]= “hello” // NSString * a= @“hello” objective-c의 문자배열

13년 5월 23일 목요일

Page 38: Object C - RIP

기본 자료형

• BOOL 자료형

• YES(1) 또는 NO(0)

13년 5월 23일 목요일

Page 39: Object C - RIP

기본 자료형

• TIP!

•어떤 변수가 특정 자료형이 지원하는 범위를 벗어나면 그 변수의 값은 무한대 또는 #INF00로 나타냄

13년 5월 23일 목요일

Page 40: Object C - RIP

연산자

• +, -, ++, --, *, /, % (산술 연산자)

• <, >, ==, <=, >=, !=, &&, ||, ! (관계 및 논리 연산자)

• =, +=, -=, /=, *=, %= (대입 연산자)

13년 5월 23일 목요일

Page 41: Object C - RIP

연산자#import <Foundation/Foundation.h>

int main(int argc, char *argv[]) { @autoreleasepool { int a=0xF0; // 이진수 : 11110000 int b=0x0F; // 이진수 : 00001111 NSLog(@"~a : %x",~a); NSLog(@"!a : %x",!a); NSLog(@"~b : %x",~b); NSLog(@"~b : %x",!b); } return 0;}

~연산자와 !연산자 차이

~는 각 비트의 값을 확인!!는 변수가 0인지 아닌지 확인!

13년 5월 23일 목요일

Page 42: Object C - RIP

3장 제어문, 배열 및 구조체

13년 5월 23일 목요일

Page 43: Object C - RIP

TRUE, FALSE, BOOL

typedef int bool;#define FALSE 0#define TRUE (1)

BOOL 자료형은 0은 false, 1은 true를 나타내는 typedef

13년 5월 23일 목요일

Page 44: Object C - RIP

반복문

• for(int i=0;i<5;i++) { }

• while (r<33) { }

• do { }while(r<33);

13년 5월 23일 목요일

Page 45: Object C - RIP

반복문 써보긔

Info button이 기본적으로 삽입되어 있다!13년 5월 23일 목요일

Page 46: Object C - RIP

반복문 써보긔

13년 5월 23일 목요일

Page 47: Object C - RIP

반복문 써보기

UIViewContorller 클래스의 수명 주기 관리 클래스 메소드들- viewDidLoad : 뷰라는 템플릿을 처음 불러올 때 실행해야 할 동작 구성- viewWillAppear : 뷰라는 템플릿에 보여질 내용을 구성- viewDidAppear : 뷰 내용 보인 후 뷰에서 실행할 동작을 구성- viewWillDisappear : 뷰 내용을 더 이상 사용 안할 때 실행하는 동작- viewDidDisappear : 뷰 내용을 없을 때 실행하는 동작- ViewDidUnload : 뷰라는 템플릿을 사용하지 않을 때 실행하는 동작

UIViewController ::method

13년 5월 23일 목요일

Page 48: Object C - RIP

반복문 써보긔- (void)viewDidLoad{ // 부모 클래스에 veiwDidLoad 메서드를 실행한다는 메시지를 보냄 [super viewDidLoad]; for (int i=0; i<5; i++) { NSLog(@"i's value:%i",i); } int i=5; while (i++<8) { NSLog(@"i's value: %i",i); } i=3; do { NSLog(@"i's value : %i",i); i++; } while (i<3);}

app실행시 바로 뜸!

MainViewController.m13년 5월 23일 목요일

Page 49: Object C - RIP

반복문 써보긔

app실행시 바로 뜸!

- (void)viewDidLoad{ // 부모 클래스에 veiwDidLoad 메서드를 실행한다는 메시지를 보냄 [super viewDidLoad]; // <Done> 버튼이 있는 있는 Flipside 뷰의 배경색을 지정 self.view.backgroundColor=[UIColor viewFlipsideBackgroundColor]; int r=9; //9가 할당된 r값을 출력하고 이를 3으로 나눈 나머지 값을 대입한 후 while 문의 논리적 조건을 확인하는 do문 do { NSLog(@"R's value:%i",r); r/=3; } while (r!=3);}

MainViewController.m13년 5월 23일 목요일

Page 50: Object C - RIP

반복문 써보긔

- (void)viewDidAppear:(BOOL)animated{ //부모 클래스에 애니메이션 효과를 넣은 viewDidAppear 실행한다는 메시지 전송 [super viewDidAppear:animated]; //Flipside 창을 종료하지 않음 BOOL quit = NO; for(int i=0;!quit;i++) { NSLog(@"an endless loop without break...%i",i); quit=YES; }}

FlipsideViewController.m

*참고!*<info>버튼은

FlipsideViewController.h의 - (IBAction)showinfo:(id)sender

리턴값(void)인풋값 (BOOL타입)

13년 5월 23일 목요일

Page 51: Object C - RIP

조건문

• if (condition) { }

• if (condition) { } else if (condition) else { }

• switch (n) { case 1: break; case 2: break; default: break;}

13년 5월 23일 목요일

Page 52: Object C - RIP

배열 및 구조체

• type array_name[ count ];

• array_name==&array_name[0];

• type array_name[ count1 ][ count2 ]; //다차원 배열

13년 5월 23일 목요일

Page 53: Object C - RIP

배열 및 구조체

• struct 구조체이름 { ...; };

• struct hello { int hi; }; // 구조체 선언

• hello hi; // hello타입 hi 구조체 변수 선언

hi.hi=1; //hi구조체 내의 hi변수 접근

13년 5월 23일 목요일

Page 54: Object C - RIP

4장 클래스, 객체 및 메시징

13년 5월 23일 목요일

Page 55: Object C - RIP

객체 지향 프로그래밍 &절차 지향 프로그래밍

• 1990년대 전 : 절차적 프로그래밍 style

• 1990년대 후 : Smalltalk와 C++ 등 객체 지향 프로그래밍 style

13년 5월 23일 목요일

Page 56: Object C - RIP

절차 지향 프로그래밍

void main 케이크만들기 재료섞기

재료모으기

오븐에 굽기

재료

케이크 반죽

데이터 흐름 단계 진행

1

2

3

4케이크

케이크

절차 데이터

13년 5월 23일 목요일

Page 57: Object C - RIP

객체 지향 프로그래밍

<객체 지향 분석>절차 지향 분석과 마찬가지로 작업 단위와 데이터 흐름을 검토-> 작업 단위를 구성하는 객체를 먼저 검토(절차는 문제를 정의한 후 작업 단위를 함수로 구현) -> CLASS로 단위별로 묶는 것!..... 일까요...

13년 5월 23일 목요일

Page 58: Object C - RIP

객체 지향 프로그래밍클래스와 객체

- 클래스는 객체를 나타내기 위한 template- 객체는 클래스의 패턴을 실제로 구현

ex) 클래스 선언typedef struct stockstruct{

char *symbol;char * name;char * lastdate;float price;} stock;

ex) 객체 선언stock astock; // stock의 인스턴스 stock mystock; // stock의 인스턴스

13년 5월 23일 목요일

Page 59: Object C - RIP

OBJECTIVE-C 클래스

C 구조체>클래스 이해에 도움- real Class ㄴㄴ

Objective -c 구조체>real 클래스는 데이터와 동작을 캡슐화

interface인 헤더 파일implementation인 소스 파일

참고! 클래스 선언시 NSObject를 부모 클래스로 선언!- 런타임 시스템 사용 위해서! -> NSObject에 포함

- 런타임 시스템은 메모리 관리와 메소드 탐색 등을 자동으로 해줌!

13년 5월 23일 목요일

Page 60: Object C - RIP

OBJECTIVE-C 클래스

#import 헤더 파일 선언@class 클래스 이름;//@interface는 클래스 선언 시작 알림 - 헤더파일! 선언만 함. 구현이 아님@interface 클래스 이름:부모 클래스 이름{//인스턴스 변수는 기본적으로 @protected로 선언( C++로 private:) <인스턴스 변수>}

프로퍼티 지시자 (프로퍼티 속성) 프로퍼티 이름;:

- (반환되는 자료형) 메서드 이름:매개변수://@end는 지시자의 종료 알림@end

#import <UIKit/UIKit.h>#import "stockquote.h"

@interface StockQuoteWrapper: NSObject{ NSMutableString * stockURL; NSMutableData * recivedData; NSURLConnection * theConnection; NSURL * theURL; NSURLRequest * theRequest;}@property (nomatomic, retain) NSURL * theURL;

-(void)buildURL: (NSString *)symbol;-(void)doStockQuote: (NSDictionary *)dictionary;

@end

피피티 28쪽 ㄱㄱ싱

<선언부>

“stockquote.h”“stockquote.m”

13년 5월 23일 목요일

Page 61: Object C - RIP

OBJECTIVE-C 클래스

#import 헤더 파일 선언

@implementation 클래스 이름;@synthesize 프로퍼티 이름;

-(반환되는 자료형)메서드 이름:매개변수{ <메서드 동작 구현>}

:@end

#import "StockQuoteWrapper.h"

@implementation StockQuoteWrapper;@synthesize theURL;

-(void)doStockQuote:(NSDictionary *)dictionary{ -- 생략 --}

-(void)buildURL:(NSString *)symbol{ -- 생략 --}@end

피피티 28쪽 ㄱㄱ싱

<구현부>

“StockQuoteWrapper.m”“StockQuoteWrapper.m”

13년 5월 23일 목요일

Page 62: Object C - RIP

OBJECTIVE-C 클래스

<Bar.h>

#import <Foundation/Foundation.h>@interface Bar: NSObject{ int myAge; NSString * myName;}-(void) myAge;-(void) myName;@end

<Bar.m>

#import "Bar.h"@implementation Bar-(void) myAge{ myAge=1; // 인스턴스 변수(매개 변수)에 접근 NSLog(@"%i",myAge);}

-(void) myName{ myName=@"Hello"; NSLog(myName); //NSLog(@"%@",myName);}@end

example

13년 5월 23일 목요일

Page 63: Object C - RIP

OBJECTIVE-C 클래스#import "Bar.h"@implementation Bar

myAge=1; // error! 인스턴스 변수(멤버 변수)는 메서드 안에서만 접근 가능myName=@”"hello" // error! 인스턴스 변수(멤버 변수)는 메서드 안에서만 접근 가능

-(void) myAge{ NSLog(@"%i",myAge);}

-(void) myName{ NSLog(myName); //NSLog(@"%@",myName);}@end

인스턴스 변수(멤버 변수)는 메서드(멤버 함수) 밖에서 접근 불가

example

13년 5월 23일 목요일

Page 64: Object C - RIP

OBJECTIVE-C 클래스#import <Foundation/Foundation.h>#import "Bar.h"

int main(int argc, char *argv[]) { @autoreleasepool //NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];[pool release];과 같다.메모리 자동 관리 { Bar * myAge = [[Bar alloc] init]; //동적 메모리 할당하며 Bar타입 myAge 객체 선언 Bar * myName = [[Bar alloc] init]; //동적 메모리 할당하며 Bar타입 myName 객체선언 [myAge myAge]; //myAge 객체에서 myAge 메서드(멤버 함수) 호출(메세징) -> C스타일 myAge->myAge() [myName myName]; //myName 객체에서 myName 메서드(멤버 함수) 호출 (메세징) -> C스타일 myName->myName()

} //autoreleasepool 나오면서 동적 메모리 해제 return 0;}

example

<참고>@protected - 메서드에서 인스턴스 변수 선언 때, 해당 클래스 및 서브 클래스에 선언된 인스턴스 메서드가 인스턴스 변수에 접근 가능@public - 클래스 메서드 제외하고 어떤 메서드에서든 인스턴스 변수에 접근 가능(public:)@package - 클래스를 구현하는 이미지 안에서 64비트 이미지를 대상으로 인스턴스 변수에 접근 가능@private - 클래스에서 선언된 메서드만 인스턴스 변수에 접근가능. 서브 클래스의 메서드 접근 불가

13년 5월 23일 목요일

Page 65: Object C - RIP

객체 지향 프로그래밍 - 동작

So... 클래스 vs 인간

클래스==인간객체==우리들(너, 나)클래스가 가지는 데이터(인스턴스 변수==멤버 변수)==심장, 폐, 뼈, 근육 등클래스가 가지는 행동(메서드==멤버 함수)==달리고, 뛰고, 걷고, 건너뛰기

13년 5월 23일 목요일

Page 66: Object C - RIP

객체 지향 프로그래밍 - 동작example

주식 구매 프로그램을 구현해 보자.jongbo

13년 5월 23일 목요일

Page 67: Object C - RIP

객체 지향 프로그래밍 - 동작example 1. 프로젝트를 만들어보자

13년 5월 23일 목요일

Page 68: Object C - RIP

객체 지향 프로그래밍 - 동작example 2. 클래스 추가

Model 폴더 추가

13년 5월 23일 목요일

Page 69: Object C - RIP

객체 지향 프로그래밍 - 동작example 2. 클래스 추가

TradingSystem.m만 추가해도TradingSystem.h까지!

13년 5월 23일 목요일

Page 70: Object C - RIP

객체 지향 프로그래밍 - 동작example 2. 클래스 추가

클래스 파일 추가하시오Stock.h & Stock.m

Storage.h & Storage.mTradingSystem.h & TradingSystem.m

Purchase.h & Purchase.m

13년 5월 23일 목요일

Page 71: Object C - RIP

객체 지향 프로그래밍 - 동작example 2. 클래스 추가

<storage.h>#import <Foundation/Foundation.h>

@class Stock; //Stock 클래스 참조@interface Storage : NSObject{

}

@end

<TradingSystem.h>#import <Foundation/Foundation.h>

@class Stock; // Stock 클래스 참조@interface TradingSystem : NSObject{ }@end

<Purchase.h>#import <Foundation/Foundation.h>#import "Stock.h" // 앱 실행 시 Stock 클래스 사용#import "Storage.h" // 앱 실행 시 Storage 클래스 사용

@class TradingSystem; // 앱 실행 시 TradingSystem 클래스 참조

@interface Purchase : NSObject{ Stock * myStock; //Stock 클래스에서 참조할 수 있는 인스턴스 변수 Storage * myStorage; // Storage 클래스에서 참조할 수 있는 인스턴스 변수 TradingSystem * myTradingSystem; //TradingSystem 클래스에서 참조할 수 있는 인스턴스 변수}@end

storage.h TradingSystem.hPurchase.h

(점선) 참조(실선) 사용

Stock.h

<storage.m>#import "Storage.h"#import "Stock.h"

@implementation Storage

@end

13년 5월 23일 목요일

Page 72: Object C - RIP

참고...보자 (@CLASS VS #IMPORT)

@class는 단순 참조로서 @interface로 함수 선언부에서는 참조 가능하나 @implementation함수 구현부에서는 참조 불가

#import는 클래스 참조와 구현이 모두 가능하게 한다.

다음 페이지 <클래스 지시자>에서 자세히 알아보자.jungbo

@class와 #import 구분의 실질적 이유는 순환 종속성을 완화시키기 위하여!

13년 5월 23일 목요일

Page 73: Object C - RIP

클래스 지시자

Foo.h Bar.h

myFoo myBar

두 클래스는 서로에 대해 알아야 함모두 #import로 서로를 참조시 에러 발생! (무한 참조와 같아!)

Bar.h Foo.h

Foo.h Bar.h

... ...

#import #import

13년 5월 23일 목요일

Page 74: Object C - RIP

클래스 지시자

Foo.h Bar.h

myFoo myBar

해결 방법! 헤더파일(선언부 @interface)에서는 @class로 참조구동파일(구현부 @implementation)에서 #import로 삽입!

Foo.m

Bar.h

Foo.m

Foo.hBar.h Foo.h#import #import@class @class

13년 5월 23일 목요일

Page 75: Object C - RIP

클래스 지시자 - 전처리기와 지시자

지시자는 ‘@’전처리기는 ‘#’

지시자는 컴파일러에게 지시해주는 것!전처리기는 필요한 기능의 소스 코드를 컴파일 하기 전에 먼저

컴파일 해서 소스 코드에 붙여 넣기

13년 5월 23일 목요일

Page 76: Object C - RIP

메서드와 메시징

- (NSMutableString *) buildHelloString: (NSString *)personName;

return type

클래스 메서드는 +,인스턴스 메서드는 - 부호

method name중요! 매개 변수를 가지는 메서드의 경우 이름 바로 뒤에 콜론을 사용하며 매개변수를 가지지 않는 메서드는 콜론을 생략

(buildHelloString: 이 이름! - 콜론도 이름의 부분)

Argument type and name메서드를 사용할 때 사용하는 매개변수의 자료형과 이름

메서드 선언

13년 5월 23일 목요일

Page 77: Object C - RIP

메서드와 메시징

[myHelloSayer buildHelloString:@“Bob” ]

Receiver : 객체 혹은 클래스의 이름

실행되는 메서드

Parameter value : 매개변수의 값. 메서드의 이름은 콜론과 매개변수 값을 포함

메서드 실행

13년 5월 23일 목요일

Page 78: Object C - RIP

클래스 메서드와 인스턴스 메서드

Class method == JAVA’s static method

클래스 메서드는 객체의 생성 여부와 관계 없이 내부에 선언한 메서드를 사용할 수 있는 것이 클래스 메서드!

인스턴스 메서드는 객체에 의존함. 클래스의 인스턴스 변수와 구현부에서 생성하는 어떤 클래스의 객체를 인스턴스 메서드

내에서 사용 가능13년 5월 23일 목요일

Page 79: Object C - RIP

클래스 메서드와 인스턴스 메서드<main.m>

#import <UIKit/UIKit.h>#import "MyClass.h"

int main(int argc, char *argv[]) {! NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];!! // MyClass * objMyClass = [MyClass alloc] init];!! MyClass * objMyClass = [[MyClass alloc] initWithString:@"This is hello."];! [objMyClass sayHelloInstance]; // 인스턴스 메서드 호출! [MyClass sayHelloClass]; // 클래스 메서드 호출! [objMyClass release]; // 객체 해제!! int retVal = UIApplicationMain(argc, argv, nil, nil);! [pool release];! return retVal;}

<MyClass.h>#import <Foundation/Foundation.h>

@interface MyClass : NSObject {! NSString * myName; // 인스턴스 변수 선언}

-(void) sayHelloInstance; // 인스턴스 메서드 선언+(void) sayHelloClass; // 클래스 메서드 선언

@end

<MyClass.m>#import "MyClass.h"

@implementation MyClass

- (id) initWithString: (NSString *) inputString { // 인스턴스 메서드 구현! self = [super init];! if(self != nil) {! ! myName = inputString;! ! [myName retain];! }! return self;}

- (void) sayHelloInstance { // 인스턴스 메서드 구현! NSLog(myName);}

+ (void) sayHelloClass { // 클래스 메서드 구현! // NSLog(myName);! NSLog(@"hello");}

- (void) dealloc { // 인스턴스 메서드 구현! [myName release];! [super dealloc];}

@end

13년 5월 23일 목요일

Page 80: Object C - RIP

클래스 메서드와 인스턴스 메서드id 자료형

id 자료형은 Objective-C의 어떤 클래스나 객체든 저장할 수 있는 자료형#import <Foundation/Foundation.h>//중간 생략int main(int argc, char *argv[]){ NSAutoreleasePool *pool = [[NSAutoreleasePool alloc]init]; Foo *myFoo = [[Foo alloc] init]; // Foo *myFoo=[Foo alloc]도 가능. init을 붙이면 객체 초기화 Bar *myBar = [[Bar alloc] init]; id varData; // id형 //생략... varData=myFoo; [varData printData]; varData=myBar; [varData printData]; [myFoo release]; [myBar release]; [pool drain]; return 0;}

/****생략*****/- (id) init //메모리 초기화시 사용하는 init 메서드{ if([super init]==nil) //super는 부모클래스를 나타냄, nil은 NULL 인스턴스 return nil; }

13년 5월 23일 목요일

Page 81: Object C - RIP

객체 생성과 초기화객체 생성! -> 메모리 공간 할당

JAVA style~Foo myFoo = new Foo();

C++ style~Foo *myFoo = new Foo();

Objective-C style!Foo *myFoo=[[Foo alloc]init];//Foo *myFoo =[Foo alloc]; [myFoo init]; //객체 초기화

or Foo *myFoo=[Foo alloc];

13년 5월 23일 목요일

Page 82: Object C - RIP

객체 생성과 초기화객체 초기화! -> 인스턴스 변수에 대한 초기값 할당

C++ style~생성자! -> 클래스 이름 그대로!Foo::Foo(){ // 생략}

Foo::Foo(int a,int b){ //생략}...

Objective-C style!MyClass * objMyClass = [[MyClass alloc] initWithString:@"This is hello."];

- (id) initWithString: (NSString *) inputString { // 인스턴스 메서드 구현! self = [super init];! if(self != nil) {! ! myName = inputString;! ! [myName retain];! }! return self;}

13년 5월 23일 목요일

Page 83: Object C - RIP

편의 초기화 메서드convenience initializer method

initWith<수식어>example>#import <UIKit/UIKit.h>#import "MyCalss.h"

int int main(int argc, char *argv[]){ @autoreleasepool { MyClass *objMyClass = [[MyClass alloc] initWithString:@"This is Hello"]; [objMyClass sayHelloInstance]; [objMyClass release]; int retVal = UIApplicationMain(argc,argv,nil,nil); return retVal; }}

initWithString: 메서드는 self를 init메서도로 초기화 후 메서드의 매개변수에 해당하는 문자 값을 반환

13년 5월 23일 목요일

Page 84: Object C - RIP

편의 초기화 메서드convenience initializer method

<MyClass.h>#import <Foundation/Foundation.h>

@interface MyClass : NSObject{ NSString *myName;}

-(void) sayHelloInstacne;+(void) sayHelloClass;@end

<MyClass.h>#import "MyClass.h"@implementation MyClass

-(id)initWithString: (NSString *) inputString{ self = [super init]; if(self != nil) { myName=inputString; [myName retain]; } return self;}

-(void)sayHelloInstance{ NSLog(myName);}

+(void)sayHelloClass{ //NSLog(@"hello");}

-(void)dealloc{ [myName release]; [super dealloc];}@end

13년 5월 23일 목요일

Page 85: Object C - RIP

복수의 매개변수를 갖는 메서드

<C style>doIt("Billy Cosby","Leonard Part 6",37);

<Objective-C style>[myMultiple doIt:@"Billy Cosby" movieName:@"Leonard Part 6" timesSeen:37];

-----------------------------------------------------------------------------------------------

-(void)doIt:(NSString *)actorName movieName:(NSString *)value timesSeen;(int)times{ NSLog(@"%@ is my favorite actor in the movie %@, I saw it %i times",actorName, value,times);}

13년 5월 23일 목요일

Page 86: Object C - RIP

13년 5월 23일 목요일