object c - rip

Post on 17-Aug-2015

218 Views

Category:

Engineering

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

OBJECTIVE - C1장 ~ 4장

13년 5월 23일 목요일

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

들어가기 앞서서...

13년 5월 23일 목요일

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

•아이폰 앺 개발 짜응!

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

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

13년 5월 23일 목요일

진실은...

13년 5월 23일 목요일

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

13년 5월 23일 목요일

OBJECTIVE C 차례

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

2장 기본 자료형과 연산자

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

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

13년 5월 23일 목요일

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

13년 5월 23일 목요일

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

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

•개발자 문서 및 포럼 소개

•기본개념

• Xcode 기본

13년 5월 23일 목요일

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

13년 5월 23일 목요일

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

13년 5월 23일 목요일

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

13년 5월 23일 목요일

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

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

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

13년 5월 23일 목요일

IOS SDK 다운로드

• 참고 사이트라해

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

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

13년 5월 23일 목요일

개발자 포럼

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

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

13년 5월 23일 목요일

프로그래밍 기본 개념

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

13년 5월 23일 목요일

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

int main(void){

printf(“Hello World\n”);

return 0;}

13년 5월 23일 목요일

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

int main(void){

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

return 0;}

13년 5월 23일 목요일

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

int main(void){

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

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

13년 5월 23일 목요일

프로그래밍 기본 개념

13년 5월 23일 목요일

프로그래밍 기본 개념

13년 5월 23일 목요일

프로그래밍 기본 개념

체크 해제

13년 5월 23일 목요일

프로그래밍 기본 개념

13년 5월 23일 목요일

프로그래밍 기본 개념

13년 5월 23일 목요일

프로그래밍 기본 개념//// 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일 목요일

프로그래밍 기본 개념

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

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

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

13년 5월 23일 목요일

프로그래밍 기본 개념#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일 목요일

프로그래밍 기본 개념

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

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

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

13년 5월 23일 목요일

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

지시자?

13년 5월 23일 목요일

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

지시자!

#include#import#define

etc..

13년 5월 23일 목요일

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

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

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

13년 5월 23일 목요일

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

Objective C는 #include ㄴㄴ #import !

13년 5월 23일 목요일

전처리기 지시자와 컴파일러 지시자@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일 목요일

주석 & 포인터

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

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

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

13년 5월 23일 목요일

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

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

13년 5월 23일 목요일

2장 기본 자료형과 연산자

13년 5월 23일 목요일

기본 자료형

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

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

• ex) double, float..

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

13년 5월 23일 목요일

기본 자료형

• BOOL 자료형

• YES(1) 또는 NO(0)

13년 5월 23일 목요일

기본 자료형

• TIP!

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

13년 5월 23일 목요일

연산자

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

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

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

13년 5월 23일 목요일

연산자#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일 목요일

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

13년 5월 23일 목요일

TRUE, FALSE, BOOL

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

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

13년 5월 23일 목요일

반복문

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

• while (r<33) { }

• do { }while(r<33);

13년 5월 23일 목요일

반복문 써보긔

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

반복문 써보긔

13년 5월 23일 목요일

반복문 써보기

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

UIViewController ::method

13년 5월 23일 목요일

반복문 써보긔- (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일 목요일

반복문 써보긔

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일 목요일

반복문 써보긔

- (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일 목요일

조건문

• if (condition) { }

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

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

13년 5월 23일 목요일

배열 및 구조체

• type array_name[ count ];

• array_name==&array_name[0];

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

13년 5월 23일 목요일

배열 및 구조체

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

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

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

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

13년 5월 23일 목요일

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

13년 5월 23일 목요일

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

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

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

13년 5월 23일 목요일

절차 지향 프로그래밍

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

재료모으기

오븐에 굽기

재료

케이크 반죽

데이터 흐름 단계 진행

1

2

3

4케이크

케이크

절차 데이터

13년 5월 23일 목요일

객체 지향 프로그래밍

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

13년 5월 23일 목요일

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

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

ex) 클래스 선언typedef struct stockstruct{

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

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

13년 5월 23일 목요일

OBJECTIVE-C 클래스

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

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

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

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

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

13년 5월 23일 목요일

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일 목요일

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일 목요일

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일 목요일

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일 목요일

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일 목요일

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

So... 클래스 vs 인간

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

13년 5월 23일 목요일

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

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

13년 5월 23일 목요일

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

13년 5월 23일 목요일

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

Model 폴더 추가

13년 5월 23일 목요일

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

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

13년 5월 23일 목요일

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

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

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

Purchase.h & Purchase.m

13년 5월 23일 목요일

객체 지향 프로그래밍 - 동작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일 목요일

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

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

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

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

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

13년 5월 23일 목요일

클래스 지시자

Foo.h Bar.h

myFoo myBar

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

Bar.h Foo.h

Foo.h Bar.h

... ...

#import #import

13년 5월 23일 목요일

클래스 지시자

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일 목요일

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

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

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

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

13년 5월 23일 목요일

메서드와 메시징

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

return type

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

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

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

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

메서드 선언

13년 5월 23일 목요일

메서드와 메시징

[myHelloSayer buildHelloString:@“Bob” ]

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

실행되는 메서드

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

메서드 실행

13년 5월 23일 목요일

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

Class method == JAVA’s static method

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

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

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

클래스 메서드와 인스턴스 메서드<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일 목요일

클래스 메서드와 인스턴스 메서드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일 목요일

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

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일 목요일

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

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일 목요일

편의 초기화 메서드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일 목요일

편의 초기화 메서드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일 목요일

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

<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일 목요일

13년 5월 23일 목요일

top related