Ios 为什么不使用指针变量
我是iOS应用程序开发的新手 我正在学习一个教程,在BIDAppDelegate.mIos 为什么不使用指针变量,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
- (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感谢你的评论。我只是好奇,是的,这是一个学习的问题:)仅仅输入随机代码不会帮你学到那么多。试着确定你为什么要写这样一行。首先,本质上,你应该考虑对象和结构/原语之间的区别。这通常需要理解程序内存的工作原理(堆栈与堆)。如果你研究这些主题,我相信你会明白为什么这次你不使用指针。