iOS面试题集(三)

22.在做友盟分享之前需要做哪些准备工作

01 最基本配置

  • 下载友盟SDK导入到工程中,按照说明导入三方库

  • 设置授权

       AppDelegate中
      //设置友盟的AppKey(友盟基础SDK授权)
          [UMSocialData setAppKey:@"578c894ae0f55a30f30008d3"];
      
       //设置如果检测到当前用户没有安装我集成的分享平台,直接隐藏平台
       //这里面需要隐藏的可以自己加
          [UMSocialConfig hiddenNotInstallPlatforms:@[UMShareToQQ, UMShareToQzone, UMShareToWechatSession, UMShareToWechatTimeline]];
      
      //要在Application中调用一下这个方法(添加系统回调)
      - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
      {
          BOOL result = [UMSocialSnsService handleOpenURL:url];
          if (result == FALSE) {
              //调用其他SDK,例如支付宝SDK等
          }
          return result;
      }  
    

02 手动集成微信

  • 苹果自带集成的只有新浪微博和腾讯微博,其它的微信,QQ之类的需要自己导入

  • 导入微信的Wechat

      //设置微信AppId、appSecret,分享url(先用友盟的)( AppDelegate中)
      [UMSocialWechatHandler setWXAppId:@"wxd930ea5d5a258f4f" appSecret:@"db426a9829e4b49a0dcac7b4162da6b6" url:@"http://www.umeng.com/social"];
      并在info的URL Types中添加 URL Schemes (就是:wxd930ea5d5a258f4f)
    

03 点击分享的写法

- (IBAction)clickShareBtn:(UIButton *)sender {

 [UMSocialSnsService presentSnsIconSheetView:self appKey:nil shareText:@"电视通" shareImage:[UIImage imageNamed:@"test_t108"]
    shareToSnsNames:@[UMShareToTencent,UMShareToWechatSession,UMShareToQQ] delegate:self];
}
在当前控制器遵守协议方法 
@interface ViewController ()
//实现一个代理方法
-(void)didFinishGetUMSocialDataInViewController:(UMSocialResponseEntity *)response
{
    if (response.responseCode == UMSResponseCodeSuccess) {
        NSLog(@"分享成功");
    }
}

04 配置info.plist文件的跳转key(配置这个应用才能跳转到分享平台)

步骤:点击info -> open as -> Source Code 
在最后的
            
前面添加   LSApplicationQueriesSchemes(这个直接在友盟那边有的)
//下面是整个key
 LSApplicationQueriesSchemes
    
        
        wechat
        weixin

        
        sinaweibohd
        sinaweibo
        sinaweibosso
        weibosdk
        weibosdk2.5

        
        mqqapi
        mqq
        mqqOpensdkSSoLogin
        mqqconnect
        mqqopensdkdataline
        mqqopensdkgrouptribeshare
        mqqopensdkfriend
        mqqopensdkapi
        mqqopensdkapiV2
        mqqopensdkapiV3
        mqzoneopensdk
        wtloginmqq
        wtloginmqq2
        mqqwpa
        mqzone
        mqzonev2
        mqzoneshare
        wtloginqzone
        mqzonewx
        mqzoneopensdkapiV2
        mqzoneopensdkapi19
        mqzoneopensdkapi
        mqqbrowser
        mttbrowser

        
        alipay
        alipayshare


        
        renrenios
        renrenapi
        renren
        renreniphone

        
        laiwangsso

        
        yixin
        yixinopenapi

        
        instagram

        
        whatsapp

        
        line

        
        fbapi
        fb-messenger-api
        fbauth2
        fbshareextension
    


//
然后在info -> open as -> proprety plist 中查看
#完成以上四个步骤就已经可以进行微信分享了,要真机测试分享出来的内容是我自己写的。但是来源会显示友盟自己在微信上申请的应用名

05 手动集成新浪微博

1.导入SinaSSO ,要导入一个依赖库:ImageIO
2. AppDelegate中
     导入新浪头文件#import "UMSocialSinaSSOHandler.h"
3.//配置新浪
    //第一个参数为新浪appkey,第二个参数为新浪secret,第三个参数是新浪微博回调地址,这里必须要和你在新浪微博后台设置的回调地址一致。
    [UMSocialSinaSSOHandler openNewSinaSSOWithAppKey:@"3921700954"
                     secret:@"04b48b094faeb16683c32669824ebdad"
                      RedirectURL:@"http://sns.whalecloud.com/sina2/callback"];

4.在info中加URL Types 
新浪的URL Schemes 是 wb 加上 appkey 
              wb3921700954
5.要想分享到新浪微博必须加下面的东东
# Build Settings -> 搜索 other link  -> 在 Other Linker Flags 中添加 -ObjC (注意O和C是大写的)

06 手动集成QQ

1.一样先导入QQ的框架:TencentOpenAPI
2.获得授权
 [UMSocialQQHandler setQQWithAppId:@"100424468" appKey:@"c7394704798a158208a74ab60104f0ba" url:@"http://www.umeng.com/social"];
3.配置URL schemes(从分享平台跳转回当前应用)
QQ:需要配置两个
3.1 :“QQ”+腾讯QQ互联应用appId转换成十六进制(不足8位前面补0),例如“QQ05FC5B14”
3.2:"tencent"+腾讯QQ互联应用appId,例如“tencent100424468

07 三方登录

1.三方登录就好办了,直接在登录平台按钮的方法里将友盟写的各个平台的代码复制过来就好
2.注意有些三方平台是需要获得登录权限的(一般就是要收费,如微信)
3.我们在打印信息中就可以拿到用户三方平台的昵称,账号,头像等公共信息做一个快捷登录

23.友盟分享SDK的集成步骤

同上  

参考链接

25.什么是线程

线程,有时被称作轻量级进程,是程序执行流的最小单元。一个标准的线程由线程ID,当前指令指针,寄存器集合和堆栈组成。通常意义上,一个进程由多个线程组成,各个线程之间共享程序内存空间和一些进程级资源。

线程的访问非常自由,它可以访问进程内存里所有数据,甚至包括其他线程的堆栈,但实际运用中线程也有自己的私有存储空间包括:栈,线程局部存储,寄存器。

线程至少有三个状态:运行,就绪,等待。改变线程优先级一般有三种方式:用户指定优先级,根据等待状态的频繁程度改变优先级,长时间得不到执行。线程主动放弃执行:等待事件,主动放弃。

26.线程和进程的区别

  1. 一个程序至少要有进程,一个进程至少要有一个线程.
  2. 进程:资源分配的最小独立单元,进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位.
  3. 线程:进程下的一个分支,是进程的实体,是CPU调度和分派的基本单元,它是比进程更小的能独立运行的基本单位,线程自己基本不拥有系统资源,只拥有一点在运行中必不可少的资源(程序计数器、一组寄存器、栈),但是它可与同属一个进程的其他线程共享进程所拥有的全部资源。
  4. 进程和线程都是由操作系统所体会的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性。
  5. 进程和线程的主要差别在于它们是不同的操作系统资源管理方式。进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。
  6. 但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。

27.系统创建多线程的方式有哪几种,分别是什么,各自的优点

多线程的概念: 情况下,UI的操作都是在主线程中进行的,如果涉及到文件的下载、图片的加载、音视频的播放等耗时操作时,在主线程中直接进行的话,会造成主界面假死(主线程堵塞),所有可以使用多线程处理耗时操作,重新开辟新的子线程,用于处理耗时操作,操作完成之后回到主线程刷新UI
分类:
同步串行:不开新线程 任务依次执行
同步并行:不开启新线程 任务依次执行
异步串行:开启新线程 任务依次同时执行
异步并行:开启新线程 多个任务同时执行
无论是串行还是并行,在同一个线程中同步执行任务,都是按照顺序一个一个执行,等待队列中的任务全部执行完成之后再接着执行
异步执行任务,所有任务同时执行,不会做任何等待

完整链接

你可能感兴趣的:(iOS面试题集(三))