1.判断类的实例

2.获取当前最高层Window

3.获取当前app是否活跃

4.允许所有请求

5.判断设备是否越狱

6.移除字符串换行符和空格

7.iOS注释方法或属性废弃或不可用

8.本地通讯录操作

判断类的实例

isKindOfClass        //判断是否是这个类或者这个类的子类的实例

例:[mystring isKindOfClass:[NSString class]]

isMemberOfClass  //判断是否是这个类的实例

例:[mystring isMemberOfClass:[NSString class]]

获取当前最高层Window

//防止提示被键盘遮挡,直接展示到最高

UIWindow *win=[[UIApplication sharedApplication].windows objectAtIndex:([UIApplication sharedApplication].windows.count-1)];

[win makeToast:@"发送消息内容超长,请分条发送。" duration:2 position:@"middle"];

获取当前app是否活跃

//当前app是活跃的在前台

[UIApplication sharedApplication].applicationState == UIApplicationStateActive

//当前app在后台

[UIApplication sharedApplication].applicationState ==UIApplicationStateBackground

允许所有请求(加下面代码加到Appdelegate头部,整个app就允许所有请求)

@implementation NSURLRequest(DataController)

+ (BOOL)allowsAnyHTTPSCertificateForHost:(NSString *)host

{

return YES;

}

@end

判断设备是否越狱

//读取应用列表,看看有无权限获取;不越狱的机器没有这个权限来判定的

- (BOOL)isJailBreak

{

if ([[NSFileManager defaultManager] fileExistsAtPath:@"/User/Applications/" ]) {

NSLog(@"该设备已越狱");

NSArray *applist = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:@"/User/Applications/"  error:nil];

NSLog(@"applist = %@", applist);

return YES;

}

NSLog(@"该设备未越狱");

return NO;

}

//判断cydia的URL scheme确认是否越狱

- (BOOL)isJailBreak

{

if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"cydia://"]]) {

NSLog(@"该设备已越狱");

return YES;

}

NSLog(@"该设备未越狱");

return NO;

}

移除字符串换行符和空格

// 移除字符串换行符和空格

-(NSString*)removeSpaceAndLine:(NSString*)content{

// Scanner

NSScanner *scanner = [[NSScanner alloc] initWithString:content];

[scanner setCharactersToBeSkipped:nil];

NSMutableString *result = [NSMutableString string];

NSString *temp;

NSCharacterSet *newLineAndWhitespaceCharacters = [ NSCharacterSet whitespaceAndNewlineCharacterSet];// 去除空格

// Scan

while (![scanner isAtEnd]) {

//得到非换行非空格的字符

temp = nil;

[scanner scanUpToCharactersFromSet:newLineAndWhitespaceCharacters intoString:&temp];

if (temp) [result appendString:temp];

// Replace with a space

if ([scanner scanCharactersFromSet:newLineAndWhitespaceCharacters intoString:NULL]) {

if (result.length > 0 && ![scanner isAtEnd]) // Dont append space to beginning or end of result

[result appendString:@""];

}

}

// Return

return [NSString stringWithFormat:@"%@",result];

}

iOS注释方法或属性废弃或不可用

废弃

-(void)oldFunction __attribute__((deprecated("使用新API")));

@property(nonatomic,strong) NSString *oldString __attribute__((deprecated("使用新属性")));

不可用

-(void)oldFunction __attribute__((unavailable("使用新API")));

@property(nonatomic,strong) NSString *oldString __attribute__((unavailable("使用新属性")));

系统宏废弃方法

NS_AVAILABLE_IOS(5_0),告诉我们这个方法可以在iOS5.0及以后的版本中使用。如果我们在比指定版本更老的版本中调用这个方法,就会引起崩溃。

NS_AVAILABLE(5.0,2.0),这里表示这个方法随Mac OS 5.0和iOS 2.0及以后的版本中使用

NS_DEPRECATED_IOS(2_0, 6_0,"使用新API"),这个宏中有两个版本号。前面一个表明了这个方法被引入时的iOS版本,后面一个表明它被废弃时的iOS版本。被废弃并不是指这个方法就不存在了,只是意味着我们应当开始考虑将相关代码迁移到新的API上去了。

NS_DEPRECATED(10_0, 10_6, 2_0, 4_0,"使用新api"),这里表示这个方法随Mac OS 10.0和iOS 2.0被引入,在Mac OS 10.6和iOS 4.0后被废弃。

本地通讯录操作

//

//  AddressBookModel.h

//  AdderssBookSystemDemo

//  本地通讯录实体类

//  Created by Vie on 16/6/4.

//  Copyright © 2016年 Vie. All rights reserved.

//

#import <Foundation/Foundation.h>

@interface AddressBookModel : NSObject

@property (nonatomic, strong) NSString *name;//姓名(firstname,中文名只传这个)

@property (nonatomic, strong) NSString *lastName;//姓氏(中文名无需理会)

@property (nonatomic, strong) NSString *jobTitle;//职务

@property (nonatomic, strong) NSString *departmentName;//部门

@property (nonatomic, strong) NSString *companyName;//公司

@property (nonatomic, strong) NSMutableArray *telArray;//电话号码数组

@property (nonatomic, strong) NSMutableArray *emailArray;//邮箱

@property (nonatomic, strong) NSString *birthday;//生日(yyyy-MM-dd)

@property (nonatomic, strong) NSData *imageHead;//地址薄头像数据

@property (nonatomic, strong) NSString *createDateStr;//创建记录的日期

@property (nonatomic, strong) NSString *strModificationDateStr;//记录的最后修改日期

//@property (nonatomic, strong) NSString *country;//国家

//@property (nonatomic, strong) NSString *province;//省

//@property (nonatomic, strong) NSString *city;//城市

@end

//

//  AddressBookModel.m

//  AdderssBookSystemDemo

//

//  Created by Vie on 16/6/4.

//  Copyright © 2016年 Vie. All rights reserved.

//

#import "AddressBookModel.h"

@implementation AddressBookModel

-(instancetype)init{

self=[super init];

if (self) {

_telArray=[[NSMutableArray alloc] init];

_emailArray=[[NSMutableArray alloc] init];

}

return self;

}

@end

//

//  ManageLocalAddressBook.h

//  AdderssBookSystemDemo

//  管理通讯录操作类

//  Created by Vie on 2016/12/29.

//  Copyright © 2016年 Vie. All rights reserved.

//

#import <Foundation/Foundation.h>

#import "AddressBookModel.h"

@interface ManageLocalAddressBook : NSObject

/**

单例

@return 返回ManageLocalAddressBook

*/

+(ManageLocalAddressBook *)shareInstance;

/**

添加一个联系人到通讯录

@param addressBookModel addressBookModel 联系人实体类

@param block 添加成功或者失败

*/

-(void)addContactToAddressBook:(AddressBookModel *)addressBookModel flag:(void(^)(BOOL flag))block;

/**

添加多个联系人到通讯录

@param modelArray 联系人实体类数组

@param block 添加成功或者失败

*/

-(void)addContactsToAddressBookByArray:(NSArray *)modelArray flag:(void(^)(BOOL flag))block;

/**

加载本地通讯录

@param block 返回所有通讯录联系人信息数组

*/

-(void)loadLocalAddressBook:(void(^)(NSArray *modelArray))block;

/**

根据姓名模糊查询联系人

@param name 联系人姓名

@param block 匹配上的联系人

*/

-(void)selectContactFromAddressBookByName:(NSString *)name array:(void(^)(NSArray *modelArray))block;

/**

根据名字前缀模糊删除匹配联系人

@param name 联系人姓名

@param block 操作结果

*/

-(void)removeContactFrmoAddressBookByName:(NSString *)name flag:(void(^)(BOOL flag))block;

@end

//

//  ManageLocalAddressBook.m

//  AdderssBookSystemDemo

//

//  Created by Vie on 2016/12/29.

//  Copyright © 2016年 Vie. All rights reserved.

//

#import "ManageLocalAddressBook.h"

//读取通讯录需要到头文件

#import <AddressBook/AddressBook.h>

#import "AddressBookModel.h"

@interface ManageLocalAddressBook ()

@end

@implementation ManageLocalAddressBook

#pragma mark Initialize

+(ManageLocalAddressBook *)shareInstance{

static dispatch_once_t once;

static id instance;

dispatch_once(&once, ^{

instance=[[self alloc] init];

});

return instance;

}

#pragma mark manageLocalAddressBook  no ui

/**

检测/请求通讯录访问权限

@param block 是否授权

*/

-(void)checkAndRequestAddressBook:(void(^)(BOOL isAuthorized))block{

if (ABAddressBookGetAuthorizationStatus()!=kABAuthorizationStatusAuthorized) {

//请求通讯录权限

ABAddressBookRef addressBook=  ABAddressBookCreateWithOptions(NULL, NULL);

ABAddressBookRequestAccessWithCompletion(addressBook, ^(bool granted, CFErrorRef error) {

if (error) {

NSLog(@"Error: %@", (__bridge NSError *)error);

block(NO);

}else if (granted){

block(YES);

}else{

NSLog(@"没有通讯录访问权限");

block(NO);

}

});

}else{

block(YES);

}

}

/**

添加一个联系人到通讯录

@param addressBookModel addressBookModel 联系人实体类

@param block 添加成功或者失败

*/

-(void)addContactToAddressBook:(AddressBookModel *)addressBookModel flag:(void(^)(BOOL flag))block{

[self checkAndRequestAddressBook:^(BOOL isAuthorized) {

if (isAuthorized) {

//创建对系统地址薄的引用

ABAddressBookRef addressBooks=ABAddressBookCreate();

//创建一个个人信息

ABRecordRef newPerson=ABPersonCreate();

CFErrorRef error=NULL;

//添加firstname

if (addressBookModel.name) {

ABRecordSetValue(newPerson, kABPersonFirstNameProperty, (__bridge CFTypeRef)addressBookModel.name, &error);

}

//添加lastname

if (addressBookModel.lastName) {

ABRecordSetValue(newPerson, kABPersonLastNameProperty, (__bridge CFTypeRef)addressBookModel.lastName, &error);

}

//添加职务

if (addressBookModel.jobTitle) {

ABRecordSetValue(newPerson, kABPersonJobTitleProperty, (__bridge CFTypeRef)addressBookModel.jobTitle,&error);

}

//添加部门

if (addressBookModel.departmentName) {

ABRecordSetValue(newPerson, kABPersonDepartmentProperty, (__bridge CFTypeRef)addressBookModel.departmentName,&error);

}

//添加公司

if (addressBookModel.companyName) {

ABRecordSetValue(newPerson, kABPersonOrganizationProperty, (__bridge CFTypeRef)addressBookModel.companyName,&error);

}

//添加生日

if (addressBookModel.birthday) {

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];

[dateFormatter setDateFormat: @"yyyy-MM-dd"];

ABRecordSetValue(newPerson, kABPersonBirthdayProperty, (__bridge CFTypeRef)[dateFormatter dateFromString:addressBookModel.birthday],&error);

}

//添加手机号码

if (addressBookModel.telArray.count>0) {

ABMutableMultiValueRef multiPhone=ABMultiValueCreateMutable(kABMultiStringPropertyType);

//多个手机号码

for (NSString *telString in addressBookModel.telArray) {

ABMultiValueAddValueAndLabel(multiPhone, (__bridge CFTypeRef)telString, kABPersonPhoneMainLabel, NULL);

}

ABRecordSetValue(newPerson, kABPersonPhoneProperty, multiPhone, &error);

CFRelease(multiPhone);

}

//添加邮箱

if (addressBookModel.emailArray.count>0) {

ABMutableMultiValueRef multiEmail=ABMultiValueCreateMutable(kABMultiStringPropertyType);

for (NSString *emailString in addressBookModel.emailArray) {

//多个工作邮箱

ABMultiValueAddValueAndLabel(multiEmail, (__bridge CFTypeRef)emailString, kABWorkLabel, NULL);

}

ABRecordSetValue(newPerson, kABPersonEmailProperty, multiEmail, &error);

CFRelease(multiEmail);

}

//添加头像

if (addressBookModel.imageHead) {

ABPersonSetImageData(newPerson, (__bridge CFDataRef) addressBookModel.imageHead , &error);

}

//将信息添加到通讯录引用中

ABAddressBookAddRecord(addressBooks, newPerson, &error);

//保存通讯录

ABAddressBookSave(addressBooks, &error);

if (newPerson) {CFRelease(newPerson);}

block(error?false:true);

}else{

block(NO);

}

}];

}

/**

添加多个联系人到通讯录

@param modelArray 联系人实体类数组

@return 添加成功或者失败

*/

-(void)addContactsToAddressBookByArray:(NSArray *)modelArray flag:(void(^)(BOOL flag))block{

[self checkAndRequestAddressBook:^(BOOL isAuthorized) {

if (isAuthorized) {

//创建对系统地址薄的引用

ABAddressBookRef addressBooks=ABAddressBookCreate();

CFErrorRef error=NULL;

if (modelArray.count>0) {

for (AddressBookModel *addressBookModel in modelArray) {

//创建一个个人信息

ABRecordRef newPerson=ABPersonCreate();

//添加firstname

if (addressBookModel.name) {

ABRecordSetValue(newPerson, kABPersonFirstNameProperty, (__bridge CFTypeRef)addressBookModel.name, &error);

}

//添加lastname

if (addressBookModel.lastName) {

ABRecordSetValue(newPerson, kABPersonLastNameProperty, (__bridge CFTypeRef)addressBookModel.lastName, &error);

}

//添加职务

if (addressBookModel.jobTitle) {

ABRecordSetValue(newPerson, kABPersonJobTitleProperty, (__bridge CFTypeRef)addressBookModel.jobTitle,&error);

}

//添加部门

if (addressBookModel.departmentName) {

ABRecordSetValue(newPerson, kABPersonDepartmentProperty, (__bridge CFTypeRef)addressBookModel.departmentName,&error);

}

//添加公司

if (addressBookModel.companyName) {

ABRecordSetValue(newPerson, kABPersonOrganizationProperty, (__bridge CFTypeRef)addressBookModel.companyName,&error);

}

//添加生日

if (addressBookModel.birthday) {

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];

[dateFormatter setDateFormat: @"yyyy-MM-dd"];

ABRecordSetValue(newPerson, kABPersonBirthdayProperty, (__bridge CFTypeRef)[dateFormatter dateFromString:addressBookModel.birthday],&error);

}

//添加手机号码

if (addressBookModel.telArray.count>0) {

ABMutableMultiValueRef multiPhone=ABMultiValueCreateMutable(kABMultiStringPropertyType);

//多个手机号码

for (NSString *telString in addressBookModel.telArray) {

ABMultiValueAddValueAndLabel(multiPhone, (__bridge CFTypeRef)telString, kABPersonPhoneMainLabel, NULL);

}

ABRecordSetValue(newPerson, kABPersonPhoneProperty, multiPhone, &error);

CFRelease(multiPhone);

}

//添加邮箱

if (addressBookModel.emailArray.count>0) {

ABMutableMultiValueRef multiEmail=ABMultiValueCreateMutable(kABMultiStringPropertyType);

for (NSString *emailString in addressBookModel.emailArray) {

//多个工作邮箱

ABMultiValueAddValueAndLabel(multiEmail, (__bridge CFTypeRef)emailString, kABWorkLabel, NULL);

}

ABRecordSetValue(newPerson, kABPersonEmailProperty, multiEmail, &error);

CFRelease(multiEmail);

}

//添加头像

if (addressBookModel.imageHead) {

ABPersonSetImageData(newPerson, (__bridge CFDataRef) addressBookModel.imageHead , &error);

}

//将信息添加到通讯录引用中

ABAddressBookAddRecord(addressBooks, newPerson, &error);

if (newPerson) {CFRelease(newPerson);}

}

}

//保存通讯录

ABAddressBookSave(addressBooks, &error);

block(error?false:true);

}else{

block(nil);

}

}];

}

/**

加载本地通讯录

@param block 返回所有通讯录联系人信息数组

*/

-(void)loadLocalAddressBook:(void(^)(NSArray *modelArray))block{

[self checkAndRequestAddressBook:^(BOOL isAuthorized) {

if (isAuthorized) {

NSMutableArray *addressBookTemp=[[NSMutableArray alloc] init];

//新建一个通讯录类

ABAddressBookRef addressBooks = ABAddressBookCreate();

//获取通讯录中的所有人

CFArrayRef allPeople = ABAddressBookCopyArrayOfAllPeople(addressBooks);

//通讯录中人数

CFIndex nPeople = ABAddressBookGetPersonCount(addressBooks);

//循环,获取每个人的个人信息

for (NSInteger i = 0; i < nPeople; i++)

{

//新建一个addressBook model类

AddressBookModel *addressBook = [[AddressBookModel alloc] init];

//获取个人

ABRecordRef person = CFArrayGetValueAtIndex(allPeople, i);

//获取个人名字

CFTypeRef abName = ABRecordCopyValue(person, kABPersonFirstNameProperty);

CFTypeRef abLastName = ABRecordCopyValue(person, kABPersonLastNameProperty);

CFStringRef abFullName = ABRecordCopyCompositeName(person);

NSString *nameString = (__bridge NSString *)abName;

NSString *lastNameString = (__bridge NSString *)abLastName;

if ((__bridge id)abFullName != nil) {

nameString = (__bridge NSString *)abFullName;

} else {

if ((__bridge id)abLastName != nil)

{

nameString = [NSString stringWithFormat:@"%@ %@", nameString, lastNameString];

}

}

addressBook.name = nameString;

//获取职务

CFTypeRef abJobTitle = ABRecordCopyValue(person, kABPersonJobTitleProperty);

addressBook.jobTitle=(__bridge NSString *)abJobTitle;

//获取部门

CFTypeRef abDepartmentName = ABRecordCopyValue(person, kABPersonDepartmentProperty);

addressBook.departmentName=(__bridge NSString *)abDepartmentName;

//获取公司

CFTypeRef abCompanyName = ABRecordCopyValue(person, kABPersonOrganizationProperty);

addressBook.companyName=(__bridge NSString *)abCompanyName;

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];

[dateFormatter setDateFormat: @"yyyy-MM-dd"];

//获取生日

CFTypeRef peopleBirthday=ABRecordCopyValue(person, kABPersonBirthdayProperty);

addressBook.birthday=[dateFormatter stringFromDate:(__bridge NSDate *)peopleBirthday];

//创建记录的日期

CFTypeRef peopleCreateDate=ABRecordCopyValue(person, kABPersonCreationDateProperty);

        addressBook.createDateStr=[dateFormatter stringFromDate:(__bridge NSDate *)peopleCreateDate];

//记录的最后修改日期

CFTypeRef peopleModificationDate=ABRecordCopyValue(person, kABPersonModificationDateProperty);

addressBook.strModificationDateStr=[dateFormatter stringFromDate:(__bridge NSDate *)peopleModificationDate];

//获取地址薄头像数据

CFDataRef imageData=ABPersonCopyImageData(person);

addressBook.imageHead=(__bridge NSData *) imageData;

//    addressBook.recordID = (int)ABRecordGetRecordID(person);

ABPropertyID multiProperties[] = {

kABPersonPhoneProperty,

kABPersonEmailProperty

};

NSInteger multiPropertiesTotal = sizeof(multiProperties) / sizeof(ABPropertyID);

for (NSInteger j = 0; j < multiPropertiesTotal; j++) {

ABPropertyID property = multiProperties[j];

ABMultiValueRef valuesRef = ABRecordCopyValue(person, property);

NSInteger valuesCount = 0;

if (valuesRef != nil) valuesCount = ABMultiValueGetCount(valuesRef);

if (valuesCount == 0) {

CFRelease(valuesRef);

continue;

}

//获取电话号码和email

for (NSInteger k = 0; k < valuesCount; k++) {

CFTypeRef value = ABMultiValueCopyValueAtIndex(valuesRef, k);

switch (j) {

case 0: {// Phone number

//使用数组处理多个手机号,并去掉 - 符号

[addressBook.telArray addObject:[(__bridge NSString*)value stringByReplacingOccurrencesOfString:@"-" withString:@""]];

break;

}

case 1: {// Email

[addressBook.emailArray addObject:(__bridge NSString*)value];

break;

}

}

CFRelease(value);

}

CFRelease(valuesRef);

}

//将个人信息添加到数组中,循环完成后addressBookTemp中包含所有联系人的信息

[addressBookTemp addObject:addressBook];

if (abName) {CFRelease(abName);}

if (abLastName){ CFRelease(abLastName);}

if (abFullName){ CFRelease(abFullName);}

if (abJobTitle) {CFRelease(abJobTitle);}

if (abDepartmentName) {CFRelease(abDepartmentName);}

if (abCompanyName) {CFRelease(abCompanyName);}

}

//如果本地没有通讯录也为nil

block((NSArray *)addressBookTemp) ;

}else{

block(nil);

}

}];

}

/**

根据姓名模糊查询联系人

@param name 联系人姓名

@param block 匹配上的联系人

*/

-(void)selectContactFromAddressBookByName:(NSString *)name array:(void(^)(NSArray *modelArray))block{

[self loadLocalAddressBook:^(NSArray *modelArray) {

NSPredicate *predicate=[NSPredicate predicateWithFormat:[NSString stringWithFormat:@"name LIKE '*%@*'",name]];

   NSArray *matchingArray=[modelArray filteredArrayUsingPredicate:predicate];

block(matchingArray);

}];

}

/**

根据名字前缀模糊删除匹配联系人

@param name 联系人姓名

@param block 操作结果

*/

-(void)removeContactFrmoAddressBookByName:(NSString *)name flag:(void(^)(BOOL flag))block{

[self checkAndRequestAddressBook:^(BOOL isAuthorized) {

if (isAuthorized) {

ABAddressBookRef addressBooks=ABAddressBookCreate();

CFErrorRef error=NULL;

//名字前缀查询

CFArrayRef selectPeople=ABAddressBookCopyPeopleWithName(addressBooks, (__bridge CFStringRef)name);

for (int i; i<[(__bridge NSArray *)selectPeople count]; i++) {

//将信息从通讯录引用中移除

ABAddressBookRemoveRecord(addressBooks, CFArrayGetValueAtIndex(selectPeople,i), &error);

}

//保存通讯录

ABAddressBookSave(addressBooks, &error);

if (selectPeople) {CFRelease(selectPeople);}

block(error?false:true);

}else{

block(nil);

}

}];

}

@end

iOS,非视图类方法的更多相关文章

  1. IOS中在自定义控件(非视图控制器)的视图跳转中 代理方法与代码块的比较

    //代码块与代替代理的设计方法 我就以在自定义视图中(非视图控制器,不能实现视图控制功能),通过代理和代码块两种方法分别实现视图的跳转,进行对比 首先自定义了一个视图,上面有一个已经注册了得BUtto ...

  2. iOS 让视图UIView单独显示某一侧的边框线

    iOS 让视图UIView 单独显示某一侧的边框线   有时候需要让view显示某一侧的边框线,这时设置layer的border是达不到效果的.在网上查阅资料发现有一个投机取巧的办法,原理是给view ...

  3. TNN iOS非图像模型入门

    注:本文同步发布于微信公众号:stringwu的互联网杂谈TNN iOS 非图像模型入门指南 1 背景 TNN是腾讯优图实验室开源的高性能.轻量级神经网络推理框架TNN,github上也有比较详细的例 ...

  4. IOS中表视图(UITableView)使用详解

    IOS中UITableView使用总结 一.初始化方法 - (instancetype)initWithFrame:(CGRect)frame style:(UITableViewStyle)styl ...

  5. ios开发----视图的生命周期

    熟悉web开发的朋友可能对页面page的生命周期有一定的了解和认识,正如web开发中的页面生命周期一样,移动客户端开发也有它自己的生命周期.下文将说明ios开发中视图的生命周期既运行顺序. 在ios视 ...

  6. iOS 非ARC基本内存管理系列 -手把手教你ARC——iOS/Mac开发ARC入门和使用(转)

    手把手教你ARC——iOS/Mac开发ARC入门和使用 Revolution of Objective-c 本文部分实例取自iOS 5 Toturail一书中关于ARC的教程和公开内容,仅用于技术交流 ...

  7. iOS 非ARC基本内存管理系列 2-多对象内存管理(3) 利用@property来自动管理内存

    iOS 基本内存管理-多对象内存管理(2)中可以看到涉及到对象的引用都要手动管理内存:每个对象都需要写如下代码 // 1.对要传入的"新车"对象car和目前Person类对象所拥有 ...

  8. ios loading视图动画(模仿58同城)

    最近看了58同城的加载视图,感觉很不错,如下图: 所以想模仿写一个,下载58同城的app,解压,发现它用的是图片来实现的动画效果, 并不是绘制出来的,所以这就相对简单些了,其实整个动画的逻辑不复杂,无 ...

  9. iOS多视图传值方式之通知传值(NSNotification;NSNotificationCenter)

    iOS传值方式之5:通知传值 第一需要发布的消息,再创建NSNotification通知对象,然后通过NSNotificationCenter通知中心发布消息(NSNotificationCenter ...

随机推荐

  1. IIS服务器允许跨域配置

    <configuration> <system.webServer> <httpProtocol> <customHeaders> <add na ...

  2. 【随笔】MQTT简介

    我们知道,将用户使用的设备称为客户端,将提供给用户信息的端口称为服务器端.两个端口之间可以通过多种通信协议进行交互,比如HTTP(同步)或者基于消息传递的异步. HTTP是一种同步无状态的协议,不支持 ...

  3. Qt里获取目录的一个另类方法

    如果有一个文件的全路径文件名, 想获取它的路径的话, qt里我没找到比较好的办法, 都是cleanPath后, 再用QString的find, left这种函数来处理. 今天又在搞这种问题的时候, 看 ...

  4. OSG的节点访问

    OSG的节点访问 转自:http://www.cnblogs.com/kanego/archive/2011/09/27/2193484.html SG中节点的访问使用的是一种访问器模式. 一个典型的 ...

  5. SqlServer操作大全

    一.基础1.说明:创建数据库CREATE DATABASE database-name2.说明:删除数据库drop database dbname3.说明:备份sql server--- 创建 备份数 ...

  6. php开发常见问题

    ajax 方面:   ajax写法:   //简写版ajax$.get('url.php',{'name':'myname','age':'18'},function(data){},'json'); ...

  7. 配置apache虚拟域名

    Apache配置文件的修改.   ----> Apache-----> httpd.conf,打开httpd.conf文件.   1)找到:#LoadModule rewrite_modu ...

  8. iOS开发之GCD

    GCD,全称Grand Central Dispath,是苹果开发的一种支持并行操作的机制.它的主要部件是一个FIFO队列和一个线程池,前者用来添加任务,后者用来执行任务. GCD中的FIFO队列称为 ...

  9. ouath原理

    1.OAuth的简述 OAuth(Open Authorization,开放授权)是为用户资源的授权定义了一个安全.开放及简单的标准,第三方无需知道用户的账号及密码,就可获取到用户的授权信息,并且这是 ...

  10. SqlServer 笔记一 某表中每个月的产品数量(DATENAME() 与 DATEPART()、YEAR())

    1.使用 DATENAME() 函数 SELECT DATENAME(yyyy, [columnName]) + '/' + DATENAME(mm, [columnName]) AS monthDa ...