본문 바로가기
프로그래밍/iOS

맵뷰(MapView) 1장 - ViewController 추가

by 백룡화검 2012. 2. 9.

MapView를 이용해 할수있는걸 다 해보려고 하는데 어디까지 갈지 모르겠네요.


새 프로젝트를 Window Based Application으로 합니다.


 

관례상 인스턴스 변수와 메서드의 이름은 소문자로 시작합니다. 만약 여러 단어로 되어 있다면 새로운 각 단어의 첫 글자는 대문자로 표기해야 합니다. (예: newFriendName)

또한 클래스 이름은 대문자로 시작합니다!! 쭉 진행하다 보니까 소문자로 만들었더라고요. 관례라는건 보편적으로 사용되는 것이니까 저처럼 실수하지 마시고 따라주세요(TestLocation) 늅늅!!


 
 이렇게 만들면 아무런 템플릿도 적용안된 순수코드가 됩니다. (프로젝트명을 testLocation만들었습니다.)

어플이 시작되면 main함수에서 testLocationAppDelegate(프로젝트명AppDelegate)가 처음으로 불러지게 됩니다.


 

여기에 화면을 구성할 뷰컨트롤러 하나를 추가해야합니다.


With XIB for user interface는 체크하고 안하고 상관없습니다. XIB는 어차피 안쓸예정이고 나중에 추가해도 됩니다.


헤더파일을 만들어야 하니 Also create "testLocationViewController.h" 는 체크해줍니다.



 파일이 만들어지고 왼쪽 프로젝트 트리에서 위치를 변경했습니다. (.h/.m은 Classes로 .xib는 Resources로 옮겼습니다.)

방금만든 testLocationViewController를 사용하려면 AppDelegate에서 불러줘야 합니다. testLocationAppDelegate.h로 갑시다.


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

@interface testLocationAppDelegate : NSObject <UIApplicationDelegate> {
    testLocationViewController *tLView;
    UIWindow *window;
}


@property (nonatomic, retain) IBOutlet UIWindow *window;
@end

======================================================


#import "testLocationViewController.h"

C언어에서 #include 와 같은 의미 입니다. testLocationViewController.h를 앞으로 사용하겠다고 선언하는 부분입니다.


@interface testLocationAppDelegate : NSObject <UIApplicationDelegate> {

testLocationAppDelegate은 NSObject의 서브 클래스가 되겠습니다. 또한 UIApplicationDelegate를 따르게 됩니다.


testLocationViewController *tLView;

선언한 testLocationViewController 클래스의 인스턴스를 가리키는 tLView 인스턴스 변수를 가지게 됩니다.


이제 testLocationAppDelegate.m으로 갑니다.

 
 #import "testLocationAppDelegate.h"

@implementation testLocationAppDelegate

@synthesize window;

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    
   
    tLView = [[testLocationViewController alloc] init];
    [window addSubview:tLView.view];
    [window makeKeyAndVisible];
    return YES;
}

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

===========================================================================


testLocationViewController *tLView;

tLView = [testLocationViewController alloc]

[tLView init];


testLocationViewController 클래스에 alloc메시지를 보내서 testLocationViewController의 새로운 인스턴스를 생성할수 있습니다.

[testLocationViewController alloc];


이 메서드는 객체가 사용할 할당된 공간을 가리키는 포인터를 리턴한다. 다음과 같이 변수에 포인터를 저장합니다.

testLocationViewController *tLView;

tLView = [testLocationViewController alloc]


testLocationViewController *tLView; 이 과정은 .h에서 해줬습니다.

tLView는 단순한 포인터라는 사실을 기억하십시오. tLView는 객체를 가리킵니다.

tLView가 가리키는 객체를 사용하기 전에 init메서드를 이용해서 그 객체를 초기화 시켜야합니다.


testLocationViewController *tLView;

tLView = [testLocationViewController alloc]

[tLView init];

위의 코드를 중첩하게 되면 우리가 .m에 쓴것과 같이집니다.

tLView = [[testLocationViewController alloc] init];


[window addSubview:tLView.view];

tLView에 달려있는 뷰를 windows에 추가합니다.


[tLView release];

사용이 끝난 변수를 메모리 해제 함수[-(void)dealloc]에서 [변수명 release]으로 해제시켜 줍니다.


1장 끗