UIViewController

本文详细解析了UIViewController的重要生命周期方法,包括初始化、视图加载、显示、消失等阶段的关键函数及其应用场景,帮助开发者更好地理解和掌握iOS应用的视图控制器管理。

UIViewController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil;

默认的初始化方法。

虽然可以,但不要在这里初始化view,因为如果在这里初始化view,系统就不会再调用loadvVew和viewDidLoad。其实,只要在调用该属性的get方法之前给view赋值(调用view的set方法),都会造成不调用loadvVew和viewDidLoad。

 

@property(nonatomic,retain) UIView *view;

在view == nil的时候,任何调用view的get方法(xxxx = self.View)都会调用loadvVew和viewDidLoad。因为有这个功能,所以子类重写get或set方法,必须先调用super的get或set方法。 

- (void)loadView; 

这个方法里,应该给view赋需要的值(使用nib,不要实现该方法)。并且应该保不在调用该方法之前调用view的set方法。

 

- (void)viewWillUnload NS_DEPRECATED_IOS(5_0,6_0);

- (void)viewDidUnload NS_DEPRECATED_IOS(3_0,6_0); 

6.0废弃,因为6.0以后,内存不足警告并不会使视图控制器释放未显示的视图。



- (void)viewDidLoad; 

在loadView后被调用,一般在view上加button之类的代码,都写在这里。

 

- (BOOL)isViewLoaded 

视图是否被加载

 

@property(nonatomic, readonly, copy) NSString *nibName;

返回nlb的名字.

@property(nonatomic, readonly, retain) NSBundle *nibBundle; 

从这个boundle加载nib,可以通过这个属性获取nib

@property(nonatomic, readonly, retain) UIStoryboard *storyboard 
返回viewcontroller使用的storyboard。

- (void)performSegueWithIdentifier:(NSString *)identifier sender:(id)sender 

先谈谈这个Segue,其实就是storyboard里连接两个控制器的那根线。传入Segue的identifier,实现跳转。

ps:(跳转后,当前控制器的nextResponder指向跳转之前的控制器)

- (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender 

这个方法用来重写,为跳转时(也就是从一个viewcontroller换到另一个viewcontroller)系统自动调用。传入的identifier参数表示Segue的id。默认是返回yes,返回no的话表示不执行跳转。可根据identifier参数设置分支语句,屏蔽相应的跳转。(注意,调用performSegueWithIdentifier并不会调用该方法,也就是说,这个方法即使返回no,也并不能阻止performSegueWithIdentifier执行跳转)

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 

执行跳转的时候,在两个viewcontroller间传数据,个人感觉比较麻烦,要是数据量大的话,会是代码丧失美感(也许是本人技术不精)

有一篇博文对这个函数做了比较详尽的解释,下为连接

StoryBoard学习(5):使用segue页面间传递数据

 

- (BOOL)canPerformUnwindSegueAction:(SEL)action fromViewController:(UIViewController *)fromViewController withSender:(id)sender 
- (UIViewController *)viewControllerForUnwindSegueAction:(SEL)action fromViewController:(UIViewController *)fromViewController withSender:(id)sender 

- (UIStoryboardSegue *)segueForUnwindingToViewController:(UIViewController *)toViewController fromViewController:(UIViewController *)fromViewController identifier:(NSString *)identifier 

UnwindSegue,ios6新增功能,使当前的控制器退出到任意一个控制器。(interface builder中,viewController下,那个绿色的exit)

对上面这三个方法有强烈求知欲望的,可以参考下面这两篇外文。

外文一外文二


- (void)viewWillAppear:(BOOL)animated;  

- (void)viewDidAppear:(BOOL)animated;   

两个系统回调函数,视图将要显示和视图已经显示。看了下外文,一个解释觉得比较靠谱,大意就是,viewWillAppear做一些数据的更新,而viewDidAppear则是做一些比较耗时的任务,例如从服务器下载数据。

原文如下:

外文三

- (void)viewWillDisappear:(BOOL)animated;

- (void)viewDidDisappear:(BOOL)animated; 

一般是在viewWillDisappear里保存数据。


- (void)viewWillLayoutSubviews NS_AVAILABLE_IOS(5_0);
- (void)viewDidLayoutSubviews NS_AVAILABLE_IOS(5_0);
和上面几个方法组原理相同,都为系统回调,一个在layoutSubviews之前调用,一个在layoutSubviews之后调用。

 

@property(nonatomic,copy) NSString *title; 

导航控制器上面的文字。

 

- (void)didReceiveMemoryWarning; 

在内存警告下被调用,关于这块内容,有一篇很不错的文章:

ios6 处理内存警告



@property(nonatomic,readonly) UIViewController *parentViewController;

ios5之后,这个方法会返回nil,具体原因,参见这篇文章:

[IOS] UIViewController的parentViewController属性

 

@property(nonatomic,readonly) UIViewController *modalViewController NS_DEPRECATED_IOS(2_0, 6_0);

ios6废弃。


@property(nonatomic,readonly) UIViewController *presentedViewController  NS_AVAILABLE_IOS(5_0);
@property(nonatomic,readonly) UIViewController *presentingViewController NS_AVAILABLE_IOS(5_0);

很好理解的两个属性。

A调用presentViewController出现B,A的presentedViewController指向B,B的presentingViewController指向A。



@property(nonatomic,assign) BOOL definesPresentationContext NS_AVAILABLE_IOS(5_0);
@property(nonatomic,assign) BOOL providesPresentationContextTransitionStyle NS_AVAILABLE_IOS(5_0);


- (BOOL)isBeingPresented NS_AVAILABLE_IOS(5_0);

可以判断一个控制器是否由presentingViewController呈现,在viewWillAppear,viewDidAppear中调用。

- (BOOL)isBeingDismissed NS_AVAILABLE_IOS(5_0);

可以判断一个控制器是否由presentingViewController撤销,在viewWillDisappear,viewDidDisappear:中调用。

- (BOOL)isMovingToParentViewController NS_AVAILABLE_IOS(5_0);

- (BOOL)isMovingFromParentViewController NS_AVAILABLE_IOS(5_0);

和上面的差不多,判断是否由父视图控制器呈现或撤销。



- (void)presentViewController:(UIViewController *)viewControllerToPresent animated: (BOOL)flag completion:(void (^)(void))completion NS_AVAILABLE_IOS(5_0);

标准的呈现视图方法,代替 presentModalViewController:animated,如果实现了completion,将会在viewControllerToPresent的viewDidAppear中被调用。

 

- (void)dismissViewControllerAnimated: (BOOL)flag completion: (void (^)(void))completion NS_AVAILABLE_IOS(5_0);

 

关闭视图,退回到上一视图。代替 dismissModalViewControllerAnimated: ,如果实现了completion,将会在该视图控制器的viewDidDisappear:中调用。[self.presentingViewController dismissViewControllerAnimated:YES completion:nil];
一般这样做。

- (void)presentModalViewController:(UIViewController *)modalViewController animated:(BOOL)animated NS_DEPRECATED_IOS(2_0, 6_0);
- (void)dismissModalViewControllerAnimated:(BOOL)animated NS_DEPRECATED_IOS(2_0, 6_0);
ios6废弃


@property(nonatomic,assign) UIModalTransitionStyle modalTransitionStyle NS_AVAILABLE_IOS(3_0);

用于设置过场动画的类型。

@property(nonatomic,assign) UIModalPresentationStyle modalPresentationStyle NS_AVAILABLE_IOS(3_2);

这个是要给被呈现的控制器设置才会生效,而不是调用presentViewController的控制器。

 

- (BOOL)disablesAutomaticKeyboardDismissal NS_AVAILABLE_IOS(4_3);

返回yes,则不能通过resignFirstResponder隐藏键盘,UIModalPresentationFormSheet模式下,要自动隐藏键盘,需要重写这个方法,并返回NO。

 

@property(nonatomic,assign) BOOL wantsFullScreenLayout NS_AVAILABLE_IOS(3_0);

默认返回NO,返回YES的话,view会以延伸到bar下面。

http://www.haodaima.net/art/2781055
内容概要:本文围绕可变桨叶四旋翼无人机的规范控制与点对点运动模拟展开,重点研究优化推力分配策略在翻转动作中的应用与性能比较。通过Matlab代码实现,构建了四旋翼动力学模型,并设计了多种控制算法以实现精确的姿态调整与轨迹跟踪。研究对比了不同推力分配方案在执行高机动性翻转动作时的稳定性、能耗效率与响应速度,旨在提升无人机在复杂飞行任务中的动态性能与控制精度。该仿真研究为无人机飞控系统的设计与优化提供了理论依据和技术支持。; 适合人群:具备一定自动控制理论基础和Matlab编程能力,从事无人机控制、飞行器动力学或机器人系统研究的科研人员及研究生。; 使用场景及目标:① 实现四旋翼无人机在三维空间中的精确点对点运动控制;② 对比分析不同推力分配策略在执行翻转等高难度动作时的控制效果与能耗表现,优化飞行性能;③ 为无人机自主飞行、特技飞行及复杂环境下的机动控制提供算法验证平台。; 阅读建议:此资源以Matlab仿真为核心,建议读者结合相关控制理论知识,深入理解代码实现细节,重点关注动力学建模、控制律设计与推力分配模块。在学习过程中,应动手调试参数,复现文中翻转动作的仿真结果,并尝试拓展至其他复杂飞行任务,以加深对无人机控制机理的理解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值