ios开发心得之一
如果学习IOS开发这对于一个初学者来说,是一件非常挠头的事情。其实学习IOS开发无外乎三大门槛。
一、 硬件门槛(学习IOS是要花钱的,一个MAC一个手机就得二万大洋了,还不算开发者帐号)
二、 环境门槛(搞喜欢了windows你花mac会很痛苦的,要什么没有什么,不过搞一搞就好了)
三、 技术门槛(语言objective-C一开始你会感觉真他妈的恶心,不过越用越爽,有点臭豆腐的感觉了。还有就是xcode的使用,IOS开发环境下的MVC的理解这些东西每一处都是档在初学者头上的利剑)
许多人学着学着就放弃了,从今天开始,哥们我有空就写点文档与大家分享一下,希望对IOS开发的初学者有点帮助。
如何理解IOS中UIViewControl/UIView/UIApplicationDelegate之间的关系。
一个UIViewControl可以对应N个UIView
N个UIViewControl对应1个UIApplicationDelegate
呵呵,不知道各位是不是看懂了,以往大家都喜欢用xcode自动生成的模版来实现程序,这样非常方便与快捷但是麻烦就在于初学者会一头雾水,对于原理的理解不是很好。我在这里给出一个完整的源程序,同时我们也来分析一下它。
1、 首先创建一个UIViewController
#import <UIKit/UIKit.h> @interface HelloWorldViewController : UIViewController @end @implementation HelloWorldViewController //这个解释一下,用loadView这个方法的原因是因为 //我们没有使用xib文件来画界面,所以用loadView方法 - ( void )loadView { //创建一个UIView,这个UIView你如何去理解它哪,你可以把它理解为一个画布 //并且初始化它的大小为整个屏幕那么大 UIView *contentView = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]]; //指定它的背景颜色 contentView.backgroundColor = [UIColor lightGrayColor]; //有了画布我们需要在上面搞点组件,一般情况下我们是用InterfaceBuilder画的 //在这里我们用手工的方法来编写 //初始化一个UILabel组件,说白了就是一个标签,CGrectMake的四个参数 //XY坐标,宽度与高度 UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 320.0f, 30.0f)]; label.text = @ "Hello World" ; label.center = contentView.center; label.backgroundColor = [UIColor clearColor]; label.textAlignment = UITextAlignmentCenter; [contentView addSubview:label]; [label release]; //现在画布上有东西了,我们需要把它放到画板上,其实这个UIViewController就是一个画板 //想一想一个画板上,是不是可以一层一层的放许多的画布哪,一个道理哪。 self .view = contentView; [contentView release]; // For testing the console pane NSLog (@ "Hello World!" ); } @end |
2、 创建一个UIApplicationDelegate
1 @interface HelloWorldAppDelegate : NSObject <UIApplicationDelegate>
2 {
3 }
4 @end
5
6 @implementation HelloWorldAppDelegate
7 //这个方法,是在程序启动后,所执行的
8 - (void)applicationDidFinishLaunching:(UIApplication *)application {
9 // UIWindow可以理解为一个画板架,我们把UIController放到UIWindows中
10 UIWindow *window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
11 HelloWorldViewController *hwvc = [[HelloWorldViewController alloc] init];
12 [window addSubview:hwvc.view];
13 [window makeKeyAndVisible];
14 }
15 @end
3、 在main启动这个程序
1 int main(int argc, char *argv[])
2 {
3 NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
4 int retVal = UIApplicationMain(argc, argv, nil, @"HelloWorldAppDelegate");
5 [pool release];
6 return retVal;
7 }
完整程序:
#import <UIKit/UIKit.h>
@interface HelloWorldViewController : UIViewController
@end
@implementation HelloWorldViewController
//这个解释一下,用loadView这个方法的原因是因为
//我们没有使用xib文件来画界面,所以用loadView方法
- (void)loadView
{
//创建一个UIView,这个UIView你如何去理解它哪,你可以把它理解为一个画布
//并且初始化它的大小为整个屏幕那么大
UIView *contentView =
[[UIView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]];
//指定它的背景颜色
contentView.backgroundColor = [UIColor lightGrayColor];
//有了画布我们需要在上面搞点组件,一般情况下我们是用InterfaceBuilder画的
//在这里我们用手工的方法来编写
//初始化一个UILabel组件,说白了就是一个标签,CGrectMake的四个参数
//XY坐标,宽度与高度
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 320.0f, 30.0f)];
label.text = @"Hello World";
label.center = contentView.center;
label.backgroundColor = [UIColor clearColor];
label.textAlignment = UITextAlignmentCenter;
[contentView addSubview:label];
[label release];
//现在画布上有东西了,我们需要把它放到画板上,其实这个UIViewController就是一个画板
//想一想一个画板上,是不是可以一层一层的放许多的画布哪,一个道理哪。
self.view = contentView;
[contentView release];
// For testing the console pane
NSLog(@"Hello World!");
}
@end
@interface HelloWorldAppDelegate : NSObject <UIApplicationDelegate>
{
}
@end
@implementation HelloWorldAppDelegate
//这个方法,是在程序启动后,所执行的
- (void)applicationDidFinishLaunching:(UIApplication *)application {
// UIWindow可以理解为一个画板架,我们把UIController放到UIWindows中
UIWindow *window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
HelloWorldViewController *hwvc = [[HelloWorldViewController alloc] init];
[window addSubview:hwvc.view];
[window makeKeyAndVisible];
}
@end
int main(int argc, char *argv[])
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
int retVal = UIApplicationMain(argc, argv, nil, @"HelloWorldAppDelegate");
[pool release];
return retVal;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述