2013-04-17 6 views
0

저는 iOS 앱 개발에있어 완전히 새로운 초보자입니다.포인터 변수를 사용하지 않는 이유는 무엇입니까?

나는 BIDAppDelegate.m

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
    // Override point for customization after application launch. 
    self.switchViewController = [[BIDSwitchViewController alloc] 
           initWithNibName:@"SwitchView" bundle:nil]; 


    UIView *switchView = self.switchViewController.view; 

    /**** WHY here do not use pointer variable? ****/ 
    CGRect switchViewFrame = switchView.frame; 

    switchViewFrame.origin.y+=[UIApplication sharedApplication].statusBarFrame.size.height; 
    switchView.frame = switchViewFrame; 
    self.window.rootViewController=self.switchViewController; 
    ... 
    ... 
    return YES; 
    } 

나는 위의 코드를 무엇을하는지 이해에 다음과 같은 코드가있는 자습서를, 다음하고 수행 일반적으로, 응용 프로그램 시작, 그것의보기를로드 할 때 루트 컨트롤러 (switchViewController) & 일부보기 조정합니다.

내 질문은, 코드에서 왜 CGRect switchViewFrame = switchView.frame; 이런 식으로 포인터 변수를 사용하지 않습니다 : CGRect *switchViewFrame = switchView.frame;?

=============== 업데이트 ==================

지금, 나는 그 이유를 실현 CGRect은 구조체이지 객관적인 클래스가 아닙니다.

struct CGRect switchViewFrame, *sViewFrame; 
sViewFrame = switchView.frame; 

CGRect switchViewFrame = switchView.frame; 동일한 코드 위에 : 다음, 나는 코드의 라인을-정의 다시 할 수 있습니까?

답변

6

CGRect은 Objective-C 개체가 아닌 C 구조체입니다. CGRect은 C API가있는 Core Graphics 프레임 워크의 일부인 CGGeometry.h에 선언되어 있습니다.

+0

다음과 같이 코드 줄을 다시 정의 할 수 있습니다.'struct CGRect switchViewFrame, * sViewFrame; sViewFrame = switchView.frame; '? – Mellon

+2

왜 그런 짓을 한거야? Objective-C는 C의 엄격한 상위 집합이므로 C와 Objective-C를 쉽게 혼합 할 수 있어야합니다. – PatrickNLT

+0

sViewFrame에 메모리를 할당하고 해제해야하며 데이터 내용을 복사해야합니다. 그렇지 않으면 switchView.frame의 주소를 sViewFrame에 할당해야합니다. 그러나, 그것은 당신이 제안하는 방식으로 작동하지 않습니다. 왜 그걸하고 싶니? 아니면 호기심에서 물어보십시오 - 이해할 수 있고 배우는 문제입니까? –

관련 문제