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. ubuntu wifi连接不上或经常断网,重启就好

    问题1.知道wifi密码,驱动也有,可以点击连接,总是提示"连接断开,您现在处于离线状态". 1.打开终端"ctrl+alt+T" 2.输入: sudo vim ...

  2. CozyRSS开发记录7-了解RSS

    CozyRSS开发记录7-了解RSS 1.初窥RSS 多找几个RSS源就会发现,有的源是用Atom协议提供的,有的源是RSS协议提供的.RSS协议有过几个版本,0.9.1.0和2.0等,理论上支持2. ...

  3. Mac下环境变量配置

    Mac下的常用环境变量配置文件 1./etc/profile   (建议不修改这个文件 ) 全局(公有)配置,不管是哪个用户,登录时都会读取该文件. 2./etc/bashrc    (一般在这个文件 ...

  4. LoadRunner 参数和变量的区别(未完)

    挺久没来更新了,坚持是件不容易的事呢,之后坚持每天总结下前一天的学习点 在LR中,参数是一种更高级的变量,他们能起到同样的效果,但同时也有几点不同 1. 定义方法不同 (这个还没看懂) 2. 调用语法 ...

  5. 【dom4j xml】使用dom4j处理XML文件--测试过程遇到的问题

    首先 关于dom4j的API,有如下: 当然  其中的实体引用有以下: 测试使用环境: 使用Maven搭建web环境,pom.xml文件配置如下: <project xmlns="ht ...

  6. Bugtags 测试平台(支持ios、android)

    官网:https://bugtags.com/ 注意:小米手机 授权 打开漂浮窗 App 集成 Bugtags SDK 后,测试人员就可直接在 App 里所见即所得的提交 Bug; SDK 会自动截屏 ...

  7. 最新版 CocoaPods 的安装流程

                                       iOS 最新版 CocoaPods 的安装流程     1.移除现有Ruby默认源 $gem sources --remove h ...

  8. bzoj2141排队(辣鸡但是好写的方法)

    题意很明确,也非常经典: 一个支持查询 区间中比k大的数的个数 并且支持单点修改的序列 ——因为题意可以转化为:查询这两个数中比后者大的个数.比后者小的个数.比前者大的个数.比前者小的个数(根据这4个 ...

  9. C# XMPP客户端与openfire通信(Matrix Xmpp 授权破解教程)

    如此著名的XMPP , 居然试过jabber-net, agsXmpp,matrix Xmpp, 无数多个例子, 居然没有一个能实现最简单的 发消息.收消息功能.好无语. 最后还是决定从商业产品 Ma ...

  10. ScrollTo:平滑滚动到页面指定位置

    使用方法 1.准备jQuery库和scrollTo.js插件. <script type="text/javascript" src="js/jquery.js&q ...