Ios 为什么不使用指针变量

Ios 为什么不使用指针变量,ios,objective-c,cocoa-touch,ios5,ios6,Ios,Objective C,Cocoa Touch,Ios5,Ios6,我是iOS应用程序开发的新手 我正在学习一个教程,在BIDAppDelegate.m - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; // Overri

我是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
),并进行一些视图调整

我的问题是,在代码中为什么
cgrit switchViewFrame=switchView.frame
不这样使用指针变量:
CGRect*switchViewFrame=switchView.frame

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

现在,我意识到原因是,
CGRect
是一个结构,而不是objective-c类。
那么,我可以重新定义代码行以:

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

上述代码与CGRect switchViewFrame=switchView.frame相同

CGRect
是C结构,而不是Objective-C对象
CGRect
CGGeometry.h
中声明,它是核心图形框架的一部分,具有C API。

CGRect
是C结构,而不是Objective-C对象
CGRect
CGGeometry.h
中声明,它是具有C API的核心图形框架的一部分。

我可以将代码行重新定义为:
struct CGRect switchViewFrame,*sViewFrame;sViewFrame=switchView.frame?你为什么要做这样的事?Objective-C是C的严格超集,您必须轻松地混合使用C和Objective-C。您必须为sViewFrame分配内存(并释放它),并确保复制数据内容,或者必须将switchView.frame的地址分配给sViewFrame。但是,它并没有按照您建议的方式工作。你为什么要这么做?或者你只是出于好奇而问——这是可以理解的,也是一个学习的问题?@Hermann Klecker感谢你的评论。我只是好奇,是的,这是一个学习的问题:)仅仅输入随机代码不会帮你学到那么多。试着确定你为什么要写这样一行。首先,本质上,你应该考虑对象和结构/原语之间的区别。这通常需要理解程序内存的工作原理(堆栈与堆)。如果你研究这些主题,我相信你会理解为什么这次你不使用指针。我可以重新定义代码行到:
struct cgrit switchview frame,*sViewFrame;sViewFrame=switchView.frame?你为什么要做这样的事?Objective-C是C的严格超集,您必须轻松地混合使用C和Objective-C。您必须为sViewFrame分配内存(并释放它),并确保复制数据内容,或者必须将switchView.frame的地址分配给sViewFrame。但是,它并没有按照您建议的方式工作。你为什么要这么做?或者你只是出于好奇而问——这是可以理解的,也是一个学习的问题?@Hermann Klecker感谢你的评论。我只是好奇,是的,这是一个学习的问题:)仅仅输入随机代码不会帮你学到那么多。试着确定你为什么要写这样一行。首先,本质上,你应该考虑对象和结构/原语之间的区别。这通常需要理解程序内存的工作原理(堆栈与堆)。如果你研究这些主题,我相信你会明白为什么这次你不使用指针。