跳至主要内容

iOS笔记

PS:<#code#>这个代码在xcode上只会显示成code,但会有提示code,需要把code替换成真实的代码块

常用宏





//屏幕尺寸
#define is3_5Inch ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(640, 960),[[UIScreen mainScreen] currentMode].size) : NO)
#define is4_0Inch ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(640, 1136),[[UIScreen mainScreen] currentMode].size) : NO)
#define is4_7Inch ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(750, 1334),[[UIScreen mainScreen] currentMode].size) : NO)
#define is5_5Inch ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1242, 2208),[[UIScreen mainScreen] currentMode].size) : NO)

//oc语言
#ifdef __OBJC__
#endif

//模拟器和真机判断
#if TARGET_IPHONE_SIMULATOR//是模拟器
#elif TARGET_OS_IPHONE//是真机
#endif

#ifdef DEBUG
#define NSLog(...) NSLog(__VA_ARGS__)
#define debugMethod() NSLog(@"%s", __func__)
#else
#define NSLog(...)
#define debugMethod()
#endif


定时器



1.CADisplayLink



//基本使用

//初始化
CADisplayLink *link = [CADisplayLink displayLinkWithTarget:self selector:@selector(update)];
//添加到运行循环
[link addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];
//停止,从运行循环移除
[link invalidate];


2.NSTimer



//基本使用

//初始化定时器
NSTimer *timer = [NSTimer timerWithTimeInterval:1.0 target:self selector:@selector(update) userInfo:nil repeats:YES];
//启动定时器
[timer fire];
//停止定时器
[timer invalidate];


单例singletion



+(__Class__ *)shareInstance
{
static __Class__ *__singletion;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
__singletion=[[self alloc] init];
});
return __singletion;
}


绘图



<#view#>.layer.masksToBounds = YES; //没这句话它圆不起来
<#view#>.layer.cornerRadius = 4.0; //设置图片圆角的大小


键盘



//寻找第一响应者
UIWindow *keyWindow = [[UIApplication sharedApplication] keyWindow];
UIView *firstResponder = [keyWindow performSelector:@selector(firstResponder)];

//退出键盘
//在不知道第一响应者的情况下取消键盘方法
[[UIApplication sharedApplication] sendAction:@selector(resignFirstResponder) to:nil from:nil forEvent:nil];


app 跳转 与 URL Scheme



//检测APP是否安装 只要调用下面这个方法就可以
[[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"appurlscheme://"]


AVFoundation



//设置扩音器
UInt32 doChangeDefaultRoute = 1;
AudioSessionSetProperty(kAudioSessionProperty_OverrideCategoryDefaultToSpeaker,sizeof(doChangeDefaultRoute), &doChangeDefaultRoute);


NSDictionary



//如何判断NSDictionary是否包含某个键

//方法一:
if ([[dictionary allKeys] containsObject:key) {
// contains key
}

//方法二:
if ([dictionary objectForKey:key]) { //objectForKey will return nil if a key doesn't exists.
// contains key
}


NSLog中文输出



//NSLog中文输出
//备注:__FILE__为当前的编译文件名(假设这里target中间有中文),它是一个字符串

//代码段1
NSLog(@"%@",[[NSString alloc] initWithUTF8String:__FILE__]);

//代码段2
NSLog(@"%@",[[NSString alloc] initWithCString:__FILE__ encoding:NSUTF8StringEncoding]);

//代码段3
NSLog(@"%@",[[NSString alloc] initWithBytes:&__FILE__ length: sizeof(__FILE__) encoding:NSUTF8StringEncoding]);


UINavigation



//隐藏导航栏
//viewWillAppear中添加
self.navigationController.navigationBarHidden = YES;


UITableView



//取消分割线
<#tableView#>.separatorStyle = UITableViewCellSeparatorStyleNone;


UITableViewCell



//取消选中状态
<#UITableViewCell#>.selectionStyle = UITableViewCellSelectionStyleNone;

//多选
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
//当前选中的cell
Custom *cell = (Custom*)[tableView cellForRowAtIndexPath:indexPath];
}

//右边箭头
<#UITableViewCell#>.accessoryType=UITableViewCellAccessoryDisclosureIndicator;


UITextField



//密码模式
<#uitextfield#>.secureTextEntry = YES;


UIWebView



/**
* webview的403、404错误处理
*
* @param webView 当前webview
* @param request 当前request
* @param navigationType 当前navigationType(正如其名称,表示导航类型向前,向后还是刷新等等)
*
* @return 是否加载网页
*/
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
static BOOL isRequestWeb = YES;

if (isRequestWeb) {
NSHTTPURLResponse *response = nil;

NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:nil];
if (response.statusCode == 404) {
// code for 404
return NO;
} else if (response.statusCode == 403) {
// code for 403
return NO;
}

[webView loadData:data MIMEType:@"text/html" textEncodingName:nil baseURL:[request URL]];

isRequestWeb = NO;
return NO;
}

return YES;
}


数据类型转换



NSDate与NSString



a、NSDate转NSString/格式化字符串



NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
// 设置日期格式
formatter.dateFormat = @"HH:mm";
// yyyy:年 MM:月 dd:日 hh:时 mm:分 ss:秒 Z代表时区
// 将日期转换为指定格式的字符串
NSString *dateStr = [formatter stringFromDate:datePicker.date];
NSLog(@"%@",dateStr);

/*
字母 日期或时间元素 表示 示例
G Era 标志符 Text AD
y 年 Year 1996 96
M 年中的月份 Month July; Jul; 07
w 年中的周数 Number 27
W 月份中的周数 Number 2
D 年中的天数 Number 189
d 月份中的天数 Number 10
F 月份中的星期 Number 2
E 星期中的天数 Text Tuesday; Tue
a Am/pm 标记 Text PM
H 一天中的小时数(0-23) Number 0
k 一天中的小时数(1-24) Number 24
K am/pm 中的小时数(0-11) Number 0
h am/pm 中的小时数(1-12) Number 12
m 小时中的分钟数 Number 30
s 分钟中的秒数 Number 55
S 毫秒数 Number 978
z 时区(General time zone,Pacific Standard Time) PST; GMT-08:00
Z 时区 RFC 822 time zone -0800
*/


b、NSString转NSDate



NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
// 设置日期格式
dateFormatter.dateFormat = @"YYYY-MM-dd";
NSDate *date = [dateFormatter dateFromString:@"1970-01-14"];


NSString与基本C语言数据类型



a.NSString转基本数据类型



[@"2" intValue];


b.基本数据类型转NSString



[NSString stringWithFormat:@"%d",8]


NSMutableAttributedString 只能添加两次属性问题



如果有多次属性添加,只能先分割成多个部分再添加属性了。

评论

此博客中的热门博文

非公开 app

 1.对用户 用户只能通过特定链接才能使用该 app,其他使用和应用商店 app 一致。 2.对开发 a,以应用商店提交 app 的标准方式提交 app,在备注添加一行,写上“App 将用于非公开分发”,提交 app。 b,  填写非公开 app 申请,https://developer.apple.com/contact/request/unlisted-app/ c,等待审核,整个审核过程会比平常审核慢 2-5 个工作日,后续更新应该会正常。 app分发类型 非公开app ABM App Store 企业包 app分发类型 非公开app ABM App Store 企业包 是否需要https, 自己搭建托管环境 否,文件托管到 App Store 否,文件托管到 App Store 否,文件托管到App Store 是,需要自己托管,需要 https 环境,受信任的 ssl证书 是否可以直接在 App Store 搜索到 否 否 是 否 是否可以在 App Store 展示 应用信息,包括 在应用信息页面 手动点击更新 是 否 是 不上传到App Store无 App Store信息 在应用商店 更新列表点击更新 是 是 是 否 是否需要手 动更新app 开启App Store的自动更新,就自动更新,否则手动更新 开启App Store的自动更新,就自动更新,否则手动更新,只能点我的头像,更新列表里面去更新 开启App Store的自动更新,就自动更新,否则手动更新 必须去 app 里面 点击更新,或者 去下载页面去 下载最新的app 包是否会过期 否,只要账号正常 否,只要账号正常 否,只要账号正常 是,包里面有 两个证书,虽 然只打包进一 个证书文件, 但那个证书文 件关联另一个, (打包的时候一 起使用)打包 的文件有效期1 年,关联的文 件有效期 3 年。打包的时候 是否允许马甲, 重复应用(相似 ui,相似代码) 是 是 否 是 应用商店审核要求 有,除了马甲应用,其他都一样 有,除了马甲应用,其他都一样 不允许马甲应用,其他都一样 不需要审核 是否能用其他 开发者账号上传 我们的定制版应用 未知 可以 不允许 无app store 应用上传权限 哪些版本可以 改成该版本 1.App Store包 2.企业包 1.企业包 1.企业包 ...

非公开 app 分发

非公开 app  简介 app 除了不能搜索到该 app,其他使用和普通的应用商店一致。 只需要使用对应的链接就可以跳转到该 app 。 非公开 app 上传审核流程 1.appstore connect 新建应用,配置和普通上传应用商店(公开应用)完全一致 2.在备注里面加上一行:该 app 属于非公开 app,提交 app 3.去非公开 app 申请链接app 为非公开 app,https://developer.apple.com/contact/request/unlisted-app/ 4.审核被拒,有两部分,一个是普通appstore审核被拒(可能没有),最后还会多上一个非公开 app 审核被拒的部分。等待只有非公开 app 审核被拒的问题后,再等上两天左右就好了。 5.审核通过后,会通过邮件发送该 app 的链接,此链接其实和其他 app 的链接格式一致,并无区别,唯一的区别是该 app 在应用商店搜索不到。

iOS企业包下载中的下载

 首先,链接格式是itms-services://?action=download-manifest&url=https://xxxx.plist plist文件格式是 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>items</key> <array> <dict> <key>assets</key> <array> <dict> <key>kind</key> <string>software-package</string> <key>url</key> <string>ipa的完整的url,可以是http的</string> </dict> <dict> <key>kind</key> <string>display-image</string> <key>url</key> <string>小图的完整的url,可以是http的</string> </dict> <dict> <key>kind</key> <string>full-size-image</string> <key>url</key...