子控件的x始终与保持父控件宽度一半保持一致:
使用拖拽约束的方法,动态改变约束;
使用masonry,
make.left.equalTo(superView).with.offset(superView.frame.size.width * 0.2);
MacOS 10.12安全与隐私没有允许任何来源的app选项解决办法
MacOS 10.12之后系统偏好设置-安全&隐私下面去除了允许安装任何来源,导致很多软件运行不了,解决方法:打开终端,输入以下命令
sudo spctl --master-disable
枚举enum 建议使用 NS_ENUM 和 NS_OPTIONS 宏来定义枚举类型
数据类型的正确使用
int -> NSInteger
unsigned -> NSUInteger
float -> CGFloat
动画时间 -> NSTimeInterval
- 无论是 MVC 模式还是 MVVM 模式,业务逻辑都不应当写在 Model 里:MVC 应在 C,MVVM 应在 VM。
- 由于字符串值可能会改变,所以要把字符串相关属性的“内存管理语义”声明为 copy 。
- 禁止默认的手势滑动返回
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
//屏蔽右滑返回手势
self.navigationController.interactivePopGestureRecognizer.enabled = NO;
}
- (void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
self.navigationController.interactivePopGestureRecognizer.enabled = YES;
}
- 字符串UTF-8解码编码
iOS中对字符串进行UTF-8编码:输出str字符串的UTF-8格式
[str stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
解码:把str字符串以UTF-8规则进行解码
[str stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
- UIWebView
// 清除cookies
NSHTTPCookie *cookie;
NSHTTPCookieStorage *storage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
for (cookie in [storage cookies]) { [storage deleteCookie:cookie];}
// 清除UIWebView的缓存
[[NSURLCachesharedURLCache] removeAllCachedResponses];
- null的处理
[string isKindOfClass:[NSNull class]];
数组不允许是nil,其他情况例如setText:可以是nil
null都不允许,可以用上面的方法排除; - arc环境下编译非arc
-fno-objc-arc - 随机数:
arc4random( ) 会生成任意正整数和0
arc4random_uniform(100) 会生成0~99的整数 (包括0和99,但是没有100) - 打电话
三种方式:
1>@“tel://10010”; openURL,缺点但是不会回到应用
2>@“telprompt://10010”; openURL,缺点是私有API,所以可能不会被审核通过
3>添加webView loadRequest,要注意其中webview没有frame - 发短信
1>@“sms://10010” openURL
2>#import<MessageUI/MessageUI.h]] > - 发邮件
1>@“mailto://10010@qq.com” openURL
2>控制器 - 为应用评分
注意一定要有Apple ID
NSString*appid =@"725296055";
NSString*str = [NSStringstringWithFormat:@"itms-apps://itunes.apple.com/cn/app/id%@?mt=8", appid];
// 或者也可以写http://
NSURL*url = [NSURL URLWithString:str];
[[UIApplicationsharedApplication]openURL:url];
- 对数组中每一个对象都执行同样的操作有两种方法:
一种是遍历数组,拿到所有的对象,进行操作;
还有一种是[array makeObjectsPerformSelector:@selsetor() withObject:…];
- 计时器的方法,如果刷新的比较慢,通常是NSTimer,但是如果在很短的时间里面调用很多次方法,用CADisplayLink,一秒内刷新60次
// 新建定时器
CADisplayLink*link = [CADisplayLinkdisplayLinkWithTarget:self selector:@selector(update)];
[link addToRunLoop: [NSRunLoop mainRunLoop]forMode:NSDefaultRunLoopMode];
self.link= link;
// CADisplayLink 作为成员变量的时候属性参数strong
// 取消定时器:
[self.link invalidate];
self.link=nil;
- 显示/隐藏Mac隐藏文件命令如下:
显示Mac隐藏文件的命令:defaults write com.apple.finder AppleShowAllFiles -bool true
隐藏Mac隐藏文件的命令:defaults write com.apple.finder AppleShowAllFiles -bool false
- Tabbar的默认高度是49
//设定Tabbar的点击后的颜色
[[UITabBar appearance] setTintColor:[UIColor redColor]];
//设定Tabbar的颜色
[[UITabBar appearance] setBarTintColor:[UIColor whiteColor]];
- 自定义了leftBarbuttonItem左滑返回手势失效了怎么办
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithImage:img style:UIBarButtonItemStylePlain target:self action:@selector(onBack:)];
self.navigationController.interactivePopGestureRecognizer.delegate = (id<UIGestureRecognizerDelegate>)self;
- ScrollView莫名其妙不能在viewController划到顶怎么办
self.automaticallyAdjustsScrollViewInsets = YES;
- 如果要使用静态单元格,则需要storyboard的UITableViewController
- 根据URL创建 NSURLRequest 请求
NSURLRequest *request = [[NSURLRequest alloc]initWithURL:url cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:60];
//参数cachePolicy表示缓存策略,枚举类型,值有以下几种:
NSURLRequestUseProtocolCachePolicy = 0 NSURLRequest默认的cache policy,使用Protocol协议定义。是最能保持一致性的协议。
NSURLRequestReloadIgnoringCacheData = 1 忽略缓存直接从原始地址下载
NSURLRequestReturnCacheDataElseLoad = 2 只有在cache中不存在data时才从原始地址下载
NSURLRequestReturnCacheDataDontLoad = 3 只使用cache数据,如果不存在cache,请求失败;次策略用于没有建立网络连接离线模式;
NSURLRequestReloadIgnoringLocalAndRemoteCacheData = 4, 忽略本地和远程的缓存数据,直接从原始地址下载,与NSURLRequestReloadIgnoringCacheData类似。
NSURLRequestReloadRevalidatingCacheData = 5 验证本地数据与远程数据是否相同,如果不同则下载远程数据,否则使用本地数据。
- 一个视图可以有很多个手势,但是一个手势只能添加到一个视图,如果需要添加到另一个视图中,需要再新建一个手势;并且一个view是可以添加多个手势,但是默认只有一个有效,要使多个手势有效,要实现手势代理方法,遵守协议
<UIGestureRecognizerDelegate>
,并且每个手势都要设置代理gesture.delegate = self;
/** * 是否允许多个手势识别器同时有效 * Simultaneously : 同时地 */
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer
shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
return YES;
}
- 非arc文件和arc文件共存
将非arc文件在arc环境下共存:
标记非arc文件:-fno-objc-arc
将arc文件在非arc环境下共存:
标记arc文件:-f-objc-arc - 随机颜色
int r = arc4random_uniform(255+1); // 表示生成0~255的随机整数
UIColor*color = [UIColor colorWithRed:(r)/255.0 green:(r)/255.0 blue:(r)/255.0 alpha:1.0];
- 图层抖动
CAKeyframeAnimation *shake = [CAKeyframeAnimation animation];
shake.keyPath = @“transform.translation.x”
shake.duration = 0.15;
CGFloat delta = 10;
shake.values = @[@0, @( - delta), @0, @(delta)];
shake.repeatCount = 2;
[self.view.layer addAnimation: shake forKey:nil];
-
区分BundleVersion和BundleShortVersionString
CFBundleVersion
CFBundleShortVersionString - iOS启动和关闭状态栏网络请求标志
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];// 启动状态栏网络请求指示
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];// 关闭状态来网络请求指示