【问题标题】:Why do not use pointer variable为什么不使用指针变量
【发布时间】:2013-04-17 08:14:53
【问题描述】:

我是 iOS 应用开发的新手。

我正在关注一个教程,该教程在 BIDAppDelegate.m

中有以下代码 sn-p
- (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 是一个结构,而不是一个objective-c 类。 那么,我可以将代码行重新定义为:

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

上面的代码和CGRect switchViewFrame = switchView.frame;一样吗?

【问题讨论】:

    标签: ios objective-c cocoa-touch ios5 ios6


    【解决方案1】:

    CGRect 是 C 结构,而不是 Objective-C 对象。 CGRectCGGeometry.h 中声明,它是具有 C API 的 Core Graphics 框架的一部分。

    【讨论】:

    • 我可以将代码行重新定义为:struct CGRect switchViewFrame, *sViewFrame; sViewFrame = switchView.frame; 吗?
    • 你为什么要这么做? Objective-C 是 C 的严格超集,您必须轻松地混合 C 和 Objective-C。
    • 您必须为 sViewFrame 分配内存(并释放它)并确保复制数据内容,否则您必须将 switchView.frame 的地址分配给 sViewFrame。但是,它不像您建议的那样工作。你为什么想这么做?还是你只是出于好奇而问——这是可以理解的,也是一个学习的问题?
    • @Hermann Klecker 感谢您的评论。我只是好奇,是的,这是一个学习的问题:)
    • 仅仅输入随机代码并不能帮助你学到很多东西。试着确定为什么你会写这样一行。首先,本质上,您应该考虑对象和结构/原语之间的区别。一般来说,这需要了解程序内存的工作原理(堆栈与堆)。如果你研究了这些主题,我相信你会明白为什么这次你不会使用指针。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-12
    • 1970-01-01
    • 2013-09-13
    • 1970-01-01
    相关资源
    最近更新 更多