ios开发开启定位权限必须要在ios info 权限里面配置么

iOS开发中info.plist相关配置(附iOS10权限设置)
字数348&阅读115&&喜欢2
1.定位为题:
调用定位时在target里设置两个属性:
NSLocationAlwaysUsageDescription
NSLocationWhenInUseUsageDescription
2. 网络请求:
Xcode升级后不支持http访问的解决办法:在Info.plist中添加NSAppTransportSecurity类型Dictionary。
在NSAppTransportSecurity下添加NSAllowsArbitraryLoads类型Boolean,值设为YES
3. 设置应用名称(Bundle display name):
&CFBundleDisplayName&
4.设置应用程序版本号(Bundle version):
每次部署应用程序的一个新版本时,将会增加这个编号,用于标识不同的版本。
&CFBundleVersion&
5.设置应用程序是否支持后台运行(Application does not run in background)
通过UIApplicationExitsOnSuspend可以设置iOS的应用程序进入到挂起状态下是否立即退出,设置为YES表示不支持后台运行退出到后台立即退出,设置为NO表示支持后台运行。
(1)设置支持后台运行
&UIApplicationExitsOnSuspend&
(2)设置不支持后台运行
&UIApplicationExitsOnSuspend&
6. info.plist的几个常见属性:
Localization native development region
与本地化设置有关,为默认的开发语言
Executable file
程序安装包的名称
Bundle identifier
软件唯一的标识,是根据公司的标识与项目名称自动生成的,在上传和测试的时候会用到
InfoDictionary version
Bundle name
App安装后显示的名称
Bundle OS Type code
用来标识软件包类型
Bundle versions string, short
发布的版本字符串
Bundle creator OS Type code
创建者的标识
Bundle version
应用程序版本号
Application requires iPhone environment
用于指示程序包是否只能运行在iPhone OS 系统上,默认为YES
Launch screen interface file base name
欢迎界面的文件名称
Main storyboard file base name
默认情况下程序的主入口
Supported interface orientations
设置程序默认支持的方向
另外iOS 10 权限设置如下(列举几个):
(需要用到的权限做key,去掉NS首字母小写做value)
&NSCameraUsageDescription&
&cameraDesciption&
&NSPhotoLibraryUsageDescription&
&photoLibraryDesciption&
&NSContactsUsageDescription&
&contactsDesciption&
&NSMicrophoneUsageDescription&
&microphoneDesciption&
以下为常用权限对照表
本文已收录于以下专栏:
相关文章推荐
提到iOS10.0权限设置,先说一下在iOS9.0的权限设置iOS9.0引入了新特性App Transport Security (ATS),导致网络请求访问失败,新特性要求App内访问的网络必须使用...
NSPhotoLibraryUsageDescription
App需要您的同意,才能访问相册
NSCameraUsageDescription
App需要您的同意,才能访问相机
key&NSPhotoLibraryUsageDescriptionkey&
string&App需要您的同意,才能访问相册string&
key&NSCameraUsageDescripti...
key&NSPhotoLibraryUsageDescriptionkey&
string&App需要您的同意,才能访问相册string&
key&NSCameraUsageDescripti...
NSPhotoLibraryUsageDescription
App需要您的同意,才能访问相册
NSCameraUsageDescription
App需要您的同意,才能访问...
当app需要使用手机的某些功能或者应用的时候,需要授权才可以访问,下面将展示一些info.plist上常用的一些授权:
第一个字典,bool类型是YES的,这个是允许访问http的网址。
我们建立一个工程后,会在Supporting files下面看到一个&工程名-Info.plist&的文件,这个是对工程做一些运行期配置的文件,很重要,不能删除。下面就对其key值和其对应的value...
我们建立一个工程后,会在Supporting files下面看到一个”工程名-Info.plist”的文件,这个是对工程做一些运行期配置的文件,很重要,不能删除。 下面就对其key值和其对应的valu...
我们建立一个工程后,会在Supporting files下面看到一个&工程名-Info.plist&的文件,这个是对工程做一些运行期配置的文件,很重要,不能删除。 
下面就对其key值和其对应的...
我们建立一个工程后,会在Supporting files下面看到一个”工程名-Info.plist”的文件,这个是对工程做一些运行期配置的文件,很重要,不能删除。
Enter your image ...
他的最新文章
讲师:王哲涵
讲师:王渊命
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)讲解iOS开发中基本的定位功能实现
作者:KenshinCui
字体:[ ] 类型:转载 时间:
这篇文章主要介绍了讲解iOS开发中基本的定位功能实现,示例基于传统的Objective-C,需要的朋友可以参考下
一、简单说明
1.CLLocationManager
CLLocationManager的常用操作和属性
开始用户定位- (void)startUpdatingL
停止用户定位- (void) stopUpdatingL
说明:当调用了startUpdatingLocation方法后,就开始不断地定位用户的位置,中途会频繁地调用代理的下面方法
  - (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)
每隔多少米定位一次
  @property(assign, nonatomic) CLLocationDistance distanceF
定位精确度(越精确就越耗电)
  @property(assign, nonatomic) CLLocationAccuracy desiredA
2.CLLocation
CLLocation用来表示某个位置的地理信息,比如经纬度、海拔等等
(1)经纬度
  @property(readonly, nonatomic) CLLocationCoordinate2D
  @property(readonly, nonatomic) CLLocationD
(3)路线,航向(取值范围是0.0° ~ 359.9°,0.0°代表真北方向)
  @property(readonly, nonatomic) CLLocationD
(4)行走速度(单位是m/s)
   @property(readonly, nonatomic) CLLocationS
(5)计算2个位置之间的距离
  - (CLLocationDistance)distanceFromLocation:(const CLLocation *)location方法
3.CLLocationCoordinate2D
CLLocationCoordinate2D是一个用来表示经纬度的结构体,定义如下
typedef struct {
&&&&&&& CLLocationD // 纬度
&&&&&&& CLLocationD // 经度
} CLLocationCoordinate2D;
一般用CLLocationCoordinate2DMake函数来创建CLLocationCoordinate2D
二、代码示例
//& YYViewController.m
//& 18-定位服务
//& Created by apple on 14-8-9.
//& Copyright (c) 2014年 yangyong. All rights reserved.
#import "YYViewController.h"
#import &CoreLocation/CoreLocation.h&
//需要遵守CLLocationManagerDelegate协议
@interface YYViewController ()&CLLocationManagerDelegate&
@property(nonatomic,strong)CLLocationManager *locM
@implementation YYViewController
#pragma mark-懒加载
-(CLLocationManager *)locMgr
&&& if (_locMgr==nil) {
&&&&&&& //1.创建位置管理器(定位用户的位置)
&&&&&&& self.locMgr=[[CLLocationManager alloc]init];
&&&&&&& //2.设置代理
&&&&&&& self.locMgr.delegate=
&&& return _locM
- (void)viewDidLoad
&&& [super viewDidLoad];
&&& //判断用户定位服务是否开启
&&& if ([CLLocationManager locationServicesEnabled]) {
&&&&&&& //开始定位用户的位置
&&&&&&& [self.locMgr startUpdatingLocation];
&&&&&&& //每隔多少米定位一次(这里的设置为任何的移动)
&&&&&&& self.locMgr.distanceFilter=kCLDistanceFilterN
&&&&&&& //设置定位的精准度,一般精准度越高,越耗电(这里设置为精准度最高的,适用于导航应用)
&&&&&&& self.locMgr.desiredAccuracy=kCLLocationAccuracyBestForN
&&& {//不能定位用户的位置
&&&&&&& //1.提醒用户检查当前的网络状况
&&&&&&& //2.提醒用户打开定位开关
&&& //测试方法,计算两个位置之间的距离
&&& [self countDistance];
#pragma mark-CLLocationManagerDelegate
&*& 当定位到用户的位置时,就会调用(调用的频率比较频繁)
-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
&&& //locations数组里边存放的是CLLocation对象,一个CLLocation对象就代表着一个位置
&& CLLocation *loc = [locations firstObject];
&&& //维度:loc.coordinate.latitude
&&& //经度:loc.coordinate.longitude
&&& NSLog(@"纬度=%f,经度=%f",loc.coordinate.latitude,loc.coordinate.longitude);
&&& NSLog(@"%d",locations.count);
&&& //停止更新位置(如果定位服务不需要实时更新的话,那么应该停止位置的更新)
//&&& [self.locMgr stopUpdatingLocation];
//计算两个位置之间的距离
-(void)countDistance
&&& //根据经纬度创建两个位置对象
&&& CLLocation *loc1=[[CLLocation alloc]initWithLatitude:40 longitude:116];
&&& CLLocation *loc2=[[CLLocation alloc]initWithLatitude:41 longitude:116];
&&& //计算两个位置之间的距离
&&& CLLocationDistance distance=[loc1 distanceFromLocation:loc2];
&&& NSLog(@"(%@)和(%@)的距离=%fM",loc1,loc2,distance);
打印查看:
代码说明:
1.关于代理方法
  需要设置代理,通过代理告诉用户当前的位置,有两个代理方法:
  locations参数里面装着CLLocation对象
其中后者是一个过期的方法,在新的方法(第一个)中使用了一个数组来替代。
说明:该方法在当定位到用户的位置时就会调用,调用比较频繁
注意:不要使用局部变量(创建位置管理器),因为局部变量的方法结束它就被销毁了。建议使用一个全局的变量,且只创建一次就可以了(使用懒加载)。
2.定位的精度
3.如果发现自己的定位服务没有打开,那么应该提醒用户打开定位服务功能。
4.定位服务是比较耗电的,如果是做定位服务(没必要实时更新的话),那么定位了用户位置后,应该停止更新位置。
三、用户隐私的保护
1.权限设置说明
从iOS 6开始,苹果在保护用户隐私方面做了很大的加强,以下操作都必须经过用户批准授权
(1)要想获得用户的位置
(2)想访问用户的通讯录、日历、相机、相册等
当想访问用户的隐私信息时,系统会自动弹出一个对话框让用户授权
注意:一旦用户选择了“Don't Allow”,意味着你的应用以后就无法使用定位功能,且当用户第一次选择了之后,以后就再也不会提醒进行设置。
因此在程序中应该进行判断,如果发现自己的定位服务没有打开,那么应该提醒用户打开定位服务功能。
CLLocationManager有个类方法可以判断当前应用的定位功能是否可用+ (BOOL)locationServicesE
  常用的方法:截图告诉用户,应该怎么打开授权
2.开发者可以在Info.plist中设置NSLocationUsageDescription说明定位的目的(Privacy - Location Usage Description)
说明:这里的定位服务是基于网络的。通常定位服务可以是基于GPS、基站或者是网络的。
四、iOS8以来的改进
iOS 8 还提供了更加人性化的定位服务选项。App 的定位服务不再仅仅是关闭或打开,现在,定位服务的启用提供了三个选项,「永不」「使用应用程序期间」和「始终」。同时,考虑到能耗问题,如果一款 App 要求始终能在后台开启定位服务,iOS 8 不仅会在首次打开 App 时主动向你询问,还会在日常使用中弹窗提醒你该 App 一直在后台使用定位服务,并询问你是否继续允许。在iOS7及以前的版本,如果在应用程序中使用定位服务只要在程序中调用startUpdatingLocation方法应用就会询问用户是否允许此应用是否允许使用定位服务,同时在提示过程中可以通过在info.plist中配置通过配置Privacy - Location Usage Description告诉用户使用的目的,同时这个配置是可选的。
但是在iOS8中配置配置项发生了变化,可以通过配置NSLocationAlwaysUsageDescription或者NSLocationWhenInUseUsageDescription来告诉用户使用定位服务的目的,并且注意这个配置是必须的,如果不进行配置则默认情况下应用无法使用定位服务,打开应用不会给出打开定位服务的提示,除非安装后自己设置此应用的定位服务。同时,在应用程序中需要根据配置对requestAlwaysAuthorization或locationServicesEnabled方法进行请求。由于本人机器已经更新到最新的iOS8.1下面的内容主要针对iOS8,使用iOS7的朋友需要稍作调整。
//& KCMainViewController.m
//& CoreLocation
//& Created by Kenshin Cui on 14-03-27.
//& Copyright (c) 2014年 Kenshin Cui. All rights reserved.
#import "KCMainViewController.h"
#import &CoreLocation/CoreLocation.h&
@interface KCMainViewController ()&CLLocationManagerDelegate&{
&&& CLLocationManager *_locationM
@implementation KCMainViewController
- (void)viewDidLoad {
&&& [super viewDidLoad];
&&& //定位管理器
&&& _locationManager=[[CLLocationManager alloc]init];
&&& if (![CLLocationManager locationServicesEnabled]) {
&&&&&&& NSLog(@"定位服务当前可能尚未打开,请设置打开!");
&&& //如果没有授权则请求用户授权
&&& if ([CLLocationManager authorizationStatus]==kCLAuthorizationStatusNotDetermined){
&&&&&&& [_locationManager requestWhenInUseAuthorization];
&&& }else if([CLLocationManager authorizationStatus]==kCLAuthorizationStatusAuthorizedWhenInUse){
&&&&&&& //设置代理
&&&&&&& _locationManager.delegate=
&&&&&&& //设置定位精度
&&&&&&& _locationManager.desiredAccuracy=kCLLocationAccuracyB
&&&&&&& //定位频率,每隔多少米定位一次
&&&&&&& CLLocationDistance distance=10.0;//十米定位一次
&&&&&&& _locationManager.distanceFilter=
&&&&&&& //启动跟踪定位
&&&&&&& [_locationManager startUpdatingLocation];
#pragma mark - CoreLocation 代理
#pragma mark 跟踪定位代理方法,每次位置发生变化即会执行(只要定位到相应位置)
//可以通过模拟器设置一个虚拟位置,否则在模拟器中无法调用此方法
-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations{
&&& CLLocation *location=[locations firstObject];//取出第一个位置
&&& CLLocationCoordinate2D coordinate=location.//位置坐标
&&& NSLog(@"经度:%f,纬度:%f,海拔:%f,航向:%f,行走速度:%f",coordinate.longitude,coordinate.latitude,location.altitude,location.course,location.speed);
&&& //如果不需要实时定位,使用完即使关闭定位服务
&&& [_locationManager stopUpdatingLocation];
1.定位频率和定位精度并不应当越精确越好,需要视实际情况而定,因为越精确越耗性能,也就越费电。
2.定位成功后会根据设置情况频繁调用-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations方法,这个方法返回一组地理位置对象数组,每个元素一个CLLocation代表地理位置信息(包含经度、纬度、海报、行走速度等信息),之所以返回数组是因为有些时候一个位置点可能包含多个位置。
3.使用完定位服务后如果不需要实时监控应该立即关闭定位服务以节省资源。
4.除了提供定位功能,CLLocationManager还可以调用startMonitoringForRegion:方法对指定区域进行监控。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具IOS开发中的这些权限,你搞懂了吗?_达内iOS培训
400-111-8989
IOS开发中的这些权限,你搞懂了吗?
APP开发避免不开系统权限的问题,如何在APP以更加友好的方式向用户展示系统权限,似乎也是开发过程中值得深思的一件事;
那如何提高APP获取iOS系统权限的通过率呢?有以下几种方式:1.在用户打开APP时就向用户请求权限;2.告知用户授权权限后能够获得好处之后,再向用户请求权限;3.在绝对必要的情况下才向用户请求权限,例如:用户访问照片库时请求访问系统相册权限;4.在展示系统权限的对话框前,先向用户显示自定义的对话框,若用户选择不允许,默认无操作,若用户选择允许,再展示系统对话框。
上述情况在开发过程中是经常遇到的,不同方式的选择会影响最后用户交互体验。这一点感悟正是源于上一周工作遇到的问题:适配iOS10,如何获取应用联网权限用以管理系统对话框的显示管理。当我把这个问题解决后,感觉有必要将常用的iOS系统权限做一个总结,以便后用。
相机、麦克风权限
通讯录权限
日历、备忘录权限
引入头文件&@import CoreT
应用启动后,检测应用中是否有联网权限
CTCellularData *cellularData = [[CTCellularData alloc]init];
cellularData.cellularDataRestrictionDidUpdateNotifier = &^(CTCellularDataRestrictedState state){
//获取联网状态
switch (state) {
& &case kCTCellularDataRestricted:
& & & &NSLog(@"Restricrted");
& &case kCTCellularDataNotRestricted:
& & & &NSLog(@"Not Restricted");
& &case kCTCellularDataRestrictedStateUnknown:
& & & &NSLog(@"Unknown");
& &default:
查询应用是否有联网功能
CTCellularData *cellularData = [[CTCellularData alloc]init];
CTCellularDataRestrictedState state = cellularData.restrictedS
switch (state) {
case kCTCellularDataRestricted:
& &NSLog(@"Restricrted");
case kCTCellularDataNotRestricted:
& &NSLog(@"Not Restricted");
case kCTCellularDataRestrictedStateUnknown:
& &NSLog(@"Unknown");
相册权限--iOS 9.0之前
导入头文件@import AssetsL
检查是否有相册权限
ALAuthorizationStatus status = [ALAssetsLibrary authorizationStatus];
switch (status) {
case ALAuthorizationStatusAuthorized:
& &NSLog(@"Authorized");
case ALAuthorizationStatusDenied:
& &NSLog(@"Denied");
case ALAuthorizationStatusNotDetermined:
& &NSLog(@"not Determined");
case ALAuthorizationStatusRestricted:
& &NSLog(@"Restricted");
相册权限--iOS 8.0之后
导入头文件@import P
检查是否有相册权限
PHAuthorizationStatus photoAuthorStatus = [PHPhotoLibrary authorizationStatus];
switch (photoAuthorStatus) {
case PHAuthorizationStatusAuthorized:
& &NSLog(@"Authorized");
case PHAuthorizationStatusDenied:
& &NSLog(@"Denied");
case PHAuthorizationStatusNotDetermined:
& &NSLog(@"not Determined");
case PHAuthorizationStatusRestricted:
& &NSLog(@"Restricted");
获取相册权限
[PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) {
if (status == PHAuthorizationStatusAuthorized) {
& &NSLog(@"Authorized");
& &NSLog(@"Denied or Restricted");
相机和麦克风权限
导入头文件@import AVF
检查是否有相机或麦克风权限
AVAuthorizationStatus AVstatus = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo];//相机权限
AVAuthorizationStatus AVstatus = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeAudio];//麦克风权限
switch (AVstatus) {
case AVAuthorizationStatusAuthorized:
& &NSLog(@"Authorized");
case AVAuthorizationStatusDenied:
& &NSLog(@"Denied");
case AVAuthorizationStatusNotDetermined:
& &NSLog(@"not Determined");
case AVAuthorizationStatusRestricted:
& &NSLog(@"Restricted");
获取相机或麦克风权限
[AVCaptureDevice requestAccessForMediaType:AVMediaTypeVideo completionHandler:^(BOOL granted) {//相机权限
if (granted) {
& &NSLog(@"Authorized");
& &NSLog(@"Denied or Restricted");
[AVCaptureDevice requestAccessForMediaType:AVMediaTypeAudio completionHandler:^(BOOL granted) {//麦克风权限
if (granted) {
& &NSLog(@"Authorized");
& &NSLog(@"Denied or Restricted");
导入头文件@import CoreL
由于iOS8.0之后定位方法的改变,需要在info.plist中进行配置;
检查是否有定位权限
BOOL isLocation = [CLLocationManager locationServicesEnabled];
if (!isLocation) {
NSLog(@"not turn on the location");
CLAuthorizationStatus CLstatus = [CLLocationManager authorizationStatus];
switch (CLstatus) {
case kCLAuthorizationStatusAuthorizedAlways:
& &NSLog(@"Always Authorized");
case kCLAuthorizationStatusAuthorizedWhenInUse:
& &NSLog(@"AuthorizedWhenInUse");
case kCLAuthorizationStatusDenied:
& &NSLog(@"Denied");
case kCLAuthorizationStatusNotDetermined:
& &NSLog(@"not Determined");
case kCLAuthorizationStatusRestricted:
& &NSLog(@"Restricted");
获取定位权限
CLLocationManager *manager = [[CLLocationManager alloc] init];
[manager requestAlwaysAuthorization];//一直获取定位信息
[manager requestWhenInUseAuthorization];//使用的时候获取定位信息
在代理方法中查看权限是否改变
- (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status{
switch (status) {
case kCLAuthorizationStatusAuthorizedAlways:
& &NSLog(@"Always Authorized");
case kCLAuthorizationStatusAuthorizedWhenInUse:
& &NSLog(@"AuthorizedWhenInUse");
case kCLAuthorizationStatusDenied:
& &NSLog(@"Denied");
case kCLAuthorizationStatusNotDetermined:
& &NSLog(@"not Determined");
case kCLAuthorizationStatusRestricted:
& &NSLog(@"Restricted");
检查是否有通讯权限
UIUserNotificationSettings *settings = [[UIApplication sharedApplication] currentUserNotificationSettings];
switch (settings.types) {
case UIUserNotificationTypeNone:
& &NSLog(@"None");
case UIUserNotificationTypeAlert:
& &NSLog(@"Alert Notification");
case UIUserNotificationTypeBadge:
& &NSLog(@"Badge Notification");
case UIUserNotificationTypeSound:
& &NSLog(@"sound Notification'");
获取推送权限
UIUserNotificationSettings *setting = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge categories:nil];
[[UIApplication sharedApplication] registerUserNotificationSettings:setting];
通讯录权限
导入头文件&@import AddressB
检查是否有通讯录权限
ABAuthorizationStatus ABstatus = ABAddressBookGetAuthorizationStatus();
switch (ABstatus) {
case kABAuthorizationStatusAuthorized:
& &NSLog(@"Authorized");
case kABAuthorizationStatusDenied:
& &NSLog(@"Denied'");
case kABAuthorizationStatusNotDetermined:
& &NSLog(@"not Determined");
case kABAuthorizationStatusRestricted:
& &NSLog(@"Restricted");
获取通讯录权限
ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, NULL);
ABAddressBookRequestAccessWithCompletion(addressBook, ^(bool granted, CFErrorRef error) {
if (granted) {
& &NSLog(@"Authorized");
& &CFRelease(addressBook);
& &NSLog(@"Denied or Restricted");
日历、备忘录权限
导入头文件
检查是否有日历或者备忘录权限
typedef NS_ENUM(NSUInteger, EKEntityType) {
EKEntityTypeEvent,//日历
EKEntityTypeReminder //备忘
EKAuthorizationStatus EKstatus = [EKEventStore &authorizationStatusForEntityType:EKEntityTypeEvent];
switch (EKstatus) {
case EKAuthorizationStatusAuthorized:
& &NSLog(@"Authorized");
case EKAuthorizationStatusDenied:
& &NSLog(@"Denied'");
case EKAuthorizationStatusNotDetermined:
& &NSLog(@"not Determined");
case EKAuthorizationStatusRestricted:
& &NSLog(@"Restricted");
获取日历或备忘录权限
EKEventStore *store = [[EKEventStore alloc]init];
[store requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError * _Nullable error) {
if (granted) {
& &NSLog(@"Authorized");
& &NSLog(@"Denied or Restricted");
素有获取权限的方法,多用于用户第一次操作应用,iOS 8.0之后,将这些设置都整合在一起,并且可以开启或关闭相应的权限。所有的权限都可以通过下面的方法打开:
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];
上述的权限多为经常用到的权限,当然不会很全面,大家如有需要其他的权限,可以在下方评论,我会及时加上去的。&
希望这篇文章能够给大家的开发工作带来一些便利。
在软件开发中,无论是那种高级语言中总会伴随着一些最为常用的设计模式,下面针对iOS中,MVC模式、代理模式、观察者模式、单例模式、策略模式、简单工厂模式这六大模式进行汇总分析。
目的项目准备运用的Core Data进行本地数据存储,本来打算只写一下Core Data的,不过既然说到了数据存储,干脆来个数据存储基础大总结!本文将对以下几个模块进行叙述。
在APP开发过程中少不了全局token的使用,今天主要和大家分享一下NSUserDefaults的使用。
和一般的入门教程不太一样,本篇主要分享一些入门 Ruby 以及脚本编写过程中的一些心得和体会,不包含 Ruby 的基础内容。希望能给同样想入坑 Ruby 的童鞋一些帮助,如果有错误的地方,也求各位大佬指正。
Copyright (C)
All Rights Reserved
选择城市和中心
达内北京亦庄大学生实训基地
达内北京网络营销中心
达内北京会计中心}

我要回帖

更多关于 ios info.plist 权限 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信