现在的位置: 首页 > 综合 > 正文

UIApplicationMain函数作用、显示关闭隐藏文件、协议委托代理

2018年08月22日 ⁄ 综合 ⁄ 共 3311字 ⁄ 字号 评论关闭

在iOS应用中,每个程序得main函数中都调用了UIApplicationMain函数。

 
intmain(intargc,char*argv[])
{
    @autoreleasepool{
      returnUIApplicationMain(argc,argv,nil,NSStringFromClass([AppDelegateclass]));
    }
}

先来看看UIApplicationMain函数的原型:

 
intUIApplicationMain
(
    intargc,
    char*argv[],
    NSString*principalClassName,
    NSString*delegateClassName
);

前面的argc和argv是ISOC标准的main函数的参数,直接传递给UIApplicationMain进行相关处理。

principalClassName是应用程序类的名字,该类必须继承自UIApplication类。

而delegateClassName是应用程序类的代理类。如果主要nib文件(在info.plist文件中指定,key是NSMainNibFile)存在,就会在nib文件对象里寻找Application对象和连接它的delegate。此函数会根据principalClassName创建UIApplication对象,然后根据delegateClassName创建一个delegate对象,并将UIApplication对象中的delegate属性设置为delegate对象。

接着会建立应用的mainrunloop,进行事件的处理(首先会调用–application:didFinishLaunchingWithOptions:)。程序正常退出时才返回(如今iOS支持后台运行,系统在必要时会强行杀死不用的进程,一般这个函数不等返回进程就终止了)。

显示Mac隐藏文件的命令:
defaults write com.apple.finderAppleShowAllFiles -bool true
 
隐藏Mac隐藏文件的命令:
defaults write com.apple.finderAppleShowAllFiles -bool false

一、什么是委托

       刚接触iOS开发的朋友肯定对委托这个东西感觉到陌生和迷惑,特别是Java转过来的(博主中枪),那么今天我们就简单的谈谈委托这个东西,atany会尽量做到说的浅显易懂的大笑~

       首先让我们来看看委托的定义:委托delegate),就是某个对象指定另一个对象处理某些特定任务的设计模式。通俗来说,就是“某个对象”把要做的事情委托给“另一个对象”去做,简单吧。

       其中“某个对象”被称作委托者,“另一个对象”被称作是被委托者。

       【注】:委托者与被委托者的叫法很多,例如(普通对象与委托对象,委托与代理等等)为了方便大家理解,下文统一使用“委托与代理”的叫法。

       在委托与代理之间还有一个重要的概念——协议,协议是委托与代理之间的桥梁,把两者紧密联系在一起。

二、委托与代理

如下图,委托方通过某种方式把任务分派出去给代理方处理,而两者之间的联系便是协议。


在程序中:一般情况下

1.委托需要做的工作有:

     1.1定义协议与方法

     1.2声明委托变量

     1.3设置代理

     1.4通过委托变量调用委托方法

 

2.代理需要做的工作有:

     2.1遵循协议

     2.2实现委托方法

可能现在大家还不明白,我们设置如下场景,把每个工作都带入代码就清楚了

场景:Boss准备举行一场party,准备邀请Atany来参加party,但是Boss没空写email给Atany,于是他委托Henry与Mary来做这件事情。

1)   先看YGViewController.h(根控制器,程序第一个界面,类似于Boss)

  1. #import <UIKit/UIKit.h>  
  2. @protocol InviteDelegate  
  3. -(void)inviteToMyParty:(NSString *)personName;//1.1定义协议与方法  
  4. @end  
  5.   
  6. @interface YGViewController : UIViewController  
  7. @property (assign,nonatomic) id<InviteDelegate> delegate;//1.2声明委托变量  
  8. - (IBAction)ClickByMary:(id)sender;//委托给Mary  
  9. - (IBAction)ClickByHenry:(id)sender;//委托给Henry  
  10. @end  


在YGViewController.h中,委托执行了两件事情,分别是定义协议与声明委托。Boss并没有实现inviteToMyParty这个方法,他没有自己去邀请。

2)   再看YGViewController.m中ClickByMary与ClickByHenry点击事件

  1. - (IBAction)ClickByMary:(id)sender {  
  2.     Mary *mary = [[Mary alloc]init];  
  3.     self.delegate = mary;//1.3设置代理  
  4.     [self.delegate inviteToMyParty:@"atany"];//1.4通过委托变量调用委托方法  
  5. }  
  6. - (IBAction)ClickByHenry:(id)sender {  
  7.     Henry *henry = [[Henry alloc]init];  
  8.     self.delegate = henry;//1.3设置代理  
  9.     [self.delegate inviteToMyParty:@"atany"];//1.4通过委托变量调用委托方法  
  10. }  


两者大同小异,都是实例化对象,然后设置代理,最后调用方法。

BOSS可以选择不同的代理(Henry与Mary)来做这件事情(inviteToMyParty),而自己却不用做。

 

3)   以Henry为例子,我们看看Henry.h

  1. #import <UIKit/UIKit.h>  
  2. #import "YGViewController.h"  
  3.   
  4. @interface Henry : UIViewController <InviteDelegate>//2.1遵循协议  
  5. @end  


Henry遵循协议,随时准备好接收Boss的召唤。

4)   Henry.m中我们实现了inviteToMyParty的具体方法,我们弹出一个对话框来显示邀请内容。

  1. -(void)inviteToMyParty:(NSString *)personName{  
  2.     NSString *hello = [NSString stringWithFormat:@"Hello,%@",personName];  
  3.     NSString *str = [NSString stringWithFormat:@"Hey Boy,this is Henry,Come to our party Please!!"];  
  4.     UIAlertView *alert = [[UIAlertView alloc]initWithTitle:hello message:str delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];  
  5.     [alert show];  
  6. }  

按照上面步骤便完成一个简单的协议+委托的程序。

效果图:

             

             

            

抱歉!评论已关闭.