iOS 小知识点(持续更新)
1、如何通过代码设置Button title的字体大小
设置
Button.titleLabel.font = [UIFont systemFontOfSize:<#(CGFloat)#>];
2、获取当前时间
NSDate *timeDate=[NSDate date]; NSDateFormatter * dateformatter=[[NSDateFormatter alloc] init]; [dateformatter setDateFormat:@"YYYYMMddHHmmsssss"]; NSString *locationString=[dateformatter stringFromDate:timeDate];
3、判断字符串是否为空字符的方法
- (BOOL) isBlankString:(NSString *)string {
if (string == nil || string == NULL) {
return YES;
}
if ([string isKindOfClass:[NSNull class]]) {
return YES;
}
if ([[string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]] length]==) {
return YES;
}
return NO;
}
4、tableView优化
//刷新整个表格
[_tableView reloadData]; //刷新当前行
[_tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
5、百度地图自定义大头针图片
- (BMKAnnotationView *)mapView:(BMKMapView *)view viewForAnnotation:(id <BMKAnnotation>)annotation
{
// 生成重用标示identifier
static NSString *AnnotationViewID = @"AnnotationViewID"; // 检查是否有重用的缓存
BMKAnnotationView* annotationView = [view dequeueReusableAnnotationViewWithIdentifier:AnnotationViewID];
((BMKPinAnnotationView*)annotationView).pinColor = BMKPinAnnotationColorGreen;
annotationView.image = [UIImage imageNamed:@"XXX.png"];
}
6、iOS APP上架所需要的 屏幕尺寸
640*960、640*1136、750*1334、1242*2208
7、iOS APP 图标的尺寸
58*58、80*80、120*120、180*180
8、
9、关闭定时器
[_myTimer invalidate];
_myTimer = nil;
10、键盘释放第一响应
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
[textField resignFirstResponder];
return YES;
}
11、点击UITableViewCell时,没有点击效果,
在cellForRowAtIndexPath:方法中写上
cell.selectionStyle = UITableViewCellSelectionStyleNone;
12、使用NSJSONSerialization 返回的对象,取决于最外层是什么,如果是{}那就是字典,[]那就是数组等
13、只支持竖屏,修改info.plist 文件就可以了。找到"Supported interface orientations" 设置item 项为Portrait就可以了。这个设置为全局设置。
14、iOS开发
先搭框架,后画界面,写功能,写接口,调试,写适配
iOS 开发文档 流程图 UI 框架 接口 功能 适配 测试 更改
iOS 初级开发工程师 C语言基础+swift语言基础
中级iOS开发工程师 iOS项目开发+UI部分+动画图层部分
15、ViewController的生命周期中各方法执行流程如下:
init—>loadView—>viewDidLoad—>viewWillApper—>viewDidApper—>viewWillDisapper—>viewDidDisapper—>viewWillUnload->viewDidUnload—>dealloc
16、GCD
1)运行在主线程的Main queue,通过dispatch_get_main_queue获取。
2)并行队列global dispatch queue,通过dispatch_get_global_queue获取,由系统创建三个不同优先级的dispatch queue。并行队列的执行顺序与其加入队列的顺序相同。
3)串行队列serial queues一般用于按顺序同步访问,可创建任意数量的串行队列,各个串行队列之间是并发的。
17、Xcode项目中我们经常遇到因为空数据(服务器传回来的数据通过JsonKit解析为之类的)导致内存泄漏进而程序崩溃的现象,这个在之前学校的时候就被坑了很多次,所以有必要封装一个非空处理的类,由于能力有限,查看一些网上的资料,想到采用递归的方式处理。
解决办法:一个老外早已在Githud有了空处理的神器:https://github.com/nicklockwood/NullSafe,只要将这个类别(Category)加入项目中就可万事无忧,由于里面代码我也不太懂,所以大家自己研究下哈。
18、读取plist文件
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"provinces.plist" ofType:nil];
NSArray *arr = [NSArray arrayWithContentsOfFile:filePath];
// 加载plist数据 // 一个NSBundle对象对应一个资源包(图片、音频、视频、plis等文件)
// NSBundle的作用:用来访问与之对应的资源包内部的文件,可以用来获得文件的全路径
// 项目中添加的资源都会被添加到主资源包中
// [NSBundle mainBundle]关联的就是项目的主资源包 NSBundle *bundle = [NSBundle mainBundle]; // 利用mainBundle获得plist文件在主资源包中的全路径
NSString *file = [bundle pathForResource:@"shops" ofType:@"plist"];
// NSString *file = [bundle pathForResource:@"shops.plist" ofType:nil];
// 凡是参数名为File,传递的都是文件的全路径
shopsArray = [NSArray arrayWithContentsOfFile:file];
19、懒加载:用到时再去加载,而且也只加载一次
(1).懒加载基本
懒加载——也称为延迟加载,即在需要的时候才加载(效率低,占用内存小)。所谓懒加载,写的是其get方法.
注意:如果是懒加载的话则一定要注意先判断是否已经有了,如果没有那么再去进行实例化
(2).使用懒加载的好处:
好处一:不必将创建对象的代码全部写在viewDidLoad方法中,代码的可读性更强
好处二:每个控件的getter方法中分别负责各自的实例化处理,代码彼此之间的独立性强,松耦合
20、
//字符串转变为数组 NSMutableString * str=[[NSMutableString alloc]initWithFormat:@"1,1,1,1,1,1"]; //字符串转变为数组2 NSMutableArray * array=[NSMutableArray arrayWithArray:[str componentsSeparatedByString:@","]]; //替换数组中的某个值 [array replaceObjectAtIndex:4 withObject:@"2"]; //把数组转换成字符串 NSString *ns=[array componentsJoinedByString:@","];
21、NSCalendar
//1. 创建1个当前的日历对象.
// 作用: 可以取到1个日期对象的各个部分.
NSCalendar *calendar = [NSCalendar currentCalendar];
//2. 指定日历对象,要去取日期对象的那些部分.
NSDateComponents *com = [calendar components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay|NSCalendarUnitWeekday fromDate:date];
//3. 通过NSDateComponents取到指定的日期的各个部分.
NSLog(@"%lu",com.year);
NSLog(@"%lu",com.month);
NSLog(@"%lu",com.day);
NSLog(@"%lu",com.weekday);
*/
22、将NSString 拆分成array
NSString * writerPos=@"10,30,400,300";
NSArray *arrWriterPos =[writerPos componentsSeparatedByString:NSLocalizedString(@",", nil)];//拆分成数组
23、UITableView每个cell之间的默认分割线如何去掉
很简单,只需要
tableView.separatorStyle = NO;
24、设置tableviewcell不让选中
1:cell.userInteractionEnabled = NO;
2:[cell setSelectionStyle:UITableViewCellSelectionStyleNone];
这两种方法都能实现不让cell有点击事件。
但如果cell中有button第一个方法也会让button失去点击事件。
25、iOS 怎么设置 UITabBarController 的第二个item为第一响应者?
UITabBarController *VC = [[UITabBarController alloc]init];
VC.selectedIndex = 1;
[self.navigationController pushViewController:VC animated:YES];
26、如何设置ios app应用名称?
info.plist文件中添加一个key:Bundle display name,value 填上应用名称
27、设置uiscrollview偏移量:
scrollView.contentOffset=CGPointMake(int x, int y);
28、状态栏
在iOS7中,状态栏默认情况下归控制器管理,比如状态栏的样式、状态栏的是否可见
控制器通过重写以下方法来控制状态栏
设置状态栏的样式
(UIStatusBarStyle)preferredStatusBarStyle;
其中UIStatusBarStyleLightContent是白色样式
设置状态栏的可见性
- (BOOL)prefersStatusBarHidden;
29、懒加载
为了改变现状,可以考虑将图片数据线保存到一个数组中,数组中有序地放着很多字典,一个字典代表一张图片数据,包含了图片名、图片描述
@property (strong, nonatomic) NSArray *images;
由于只需要初始化一次图片数据,因此放在get方法中初始化
将属性放在get方法中初始化的方式,称为“懒加载”\”延迟加载”
30、OC语法规定:不允许直接修改对象的结构体属性的成员
下面代码是错误的:
self.headBtn.frame.origin.y -= 10;
31、transform属性
利用transform属性可以修改控件的位移(位置)、缩放、旋转
创建一个transform属性(仔细看这里的方法名,里面有个Make,是和下面进行叠加方法最大的区别)
CGAffineTransform CGAffineTransformMakeTranslation(CGFloat tx, CGFloat ty) ;
CGAffineTransform CGAffineTransformMakeScale(CGFloat sx, CGFloat sy);
CGAffineTransform CGAffineTransformMakeRotation(CGFloat angle)
(注意:angle是弧度制,并不是角度制)
在某个transform的基础上进行叠加
CGAffineTransform CGAffineTransformTranslate(CGAffineTransform t, CGFloat tx, CGFloat ty);
CGAffineTransform CGAffineTransformScale(CGAffineTransform t, CGFloat sx, CGFloat sy);
CGAffineTransform CGAffineTransformRotate(CGAffineTransform t, CGFloat angle);
清空之前设置的transform属性
view.transform = CGAffineTransformIdentity;
32、当你发现通过代码无法修改控件的位置或者尺寸的时候,应该去掉storyboard里面的autolayout功能
33、instancetype
instancetype在类型表示上,跟id一样,可以表示任何对象类型
instancetype只能用在返回值类型上,不能像id一样用在参数类型上
instancetype比id多一个好处:编译器会检测instancetype的真实类型
34、重写init方法的使用和注意
一定要调用super的init方法:因为初始化父类中会声明一些成员变量和其他属性
就是调用super的init方法 最后返回的就是一个id也就是self
有时候调用[super init]方法返回的不一定是一个self,但是为了保证它返回的是一个self就要进行一个赋值操作;
注意:调用super 初始化完毕 就一定要赋值给self
返回一个self意思是:返回一个已经初始化完毕的一个对象
构造方法的注意点:
先调用父类的构造方法[super init];
再进行子类内部成员变量的初始化
35、layoutSubviews作用
layoutSubviews是对subviews重新布局。比如,我们想更新子视图的位置的时候,可以通过调用layoutSubviews方法,既可以实现对子视图重新布局。
layoutSubviews默认是不做任何事情的,用到的时候,需要在自雷进行重写。
36、layoutSubviews以下情况会被调用
苹果官方文档已经强调,不能直接调用layoutSubviews对子视图进行重新布局。那么,layoutSubviews什么情况下会被调用呢?通过百度搜索,发现以下几种情况layoutSubviews会被调用。
直接调用setLayoutSubviews。(这个在上面苹果官方文档里有说明)
addSubview的时候。
当view的frame发生改变的时候。
滑动UIScrollView的时候。
旋转Screen会触发父UIView上的layoutSubviews事件。
改变一个UIView大小的时候也会触发父UIView上的layoutSubviews事件。
37、property的使用策略
strong 一般是使用在OC对象上 (也可以使用在UI控件上(会有问题的))
NSSArray NSDictionary 模型...
weak 一般是使用在UI控件上 也可以使用在OC对象(也是有问题的)
UITextFeild UIButton.....
copy 一般使用在NSString Block
assign 一般是使用基本数据类型上, 枚举 结构体
38、一个控件有2种创建方式
第一、通过代码创建
初始化时一定会调用initWithFrame:方法
第二、通过xib\storyboard创建
初始化时不会调用initWithFrame:方法,只会调用initWithCoder:方法
初始化完毕后会调用awakeFromNib方法
有时候希望在控件初始化时做一些初始化操作,比如添加子控件、设置基本属性
这时需要根据控件的创建方式,来选择在initWithFrame:(给控件设置位置)、initWithCoder:、awakeFromNib(初始化控件)的哪个方法中操作
39、tableview 的detailTextLabel 不起作用
要想给tableview加detailTextLabel,
initWithStyle必须为:UITableViewCellStyleSubtitle
40、一个 view 在父视图中心
child.center = [parent convertPoint:parent.center fromView:parent.superview];
41、键盘上方增加工具栏
UIToolbar *keyboardDoneButtonView = [[UIToolbar alloc] init];
[keyboardDoneButtonView sizeToFit];
UIBarButtonItem *doneButton = [[UIBarButtonItem alloc]initWithTitle:@"Done" style:UIBarButtonItemStyleBordered target:self action:@selector(doneClicked:)]; [keyboardDoneButtonView setItems:[NSArray arrayWithObjects:doneButton, nil]];
txtField.inputAccessoryView = keyboardDoneButtonView;
42、判断某一行的 cell 是否已经显示
CGRect cellRect = [tableView rectForRowAtIndexPath:indexPath];
BOOL completelyVisible = CGRectContainsRect(tableView.bounds, cellRect);
43、隐藏 UITextView/UITextField 光标
textField.tintColor = [UIColor clearColor];
44、修改UITextField光标位置
textFielde.leftView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, width, height)];
textField.leftViewMode = UITextFieldViewModeAlways;
45、Block的循环引用
如果在Block中使用_strong修饰符的对象类型自动变量,当block从栈复制到堆时,该对象为Block所持有。这样就容易引起循环引用。
为了避免循环引用可以使用_block变量、_weak修饰符以及_unsafe_unretained修饰符。
_block和_weak的区别:
1._block可以修饰对象,也可以修饰基本类型。
2._weak只可以修饰对象。
3._block在block中可以被重新赋值,_weak不可以。
_unsafe_unretained不会被自动置空为nil。
iOS 小知识点(持续更新)的更多相关文章
- web端小知识点--持续更新
1.弹性滚动overflow:auto; -webkit-overflow-scrolling: touch; -mo-overflow-scrolling: touch; overflow-scro ...
- [C语言]小知识点 持续更新
2019-11-24 1.如果输入: printf(,)); 会得到0: 这和我们的日常判断不相符! 然而,改成: printf(,)); 就可以成功输出“2”: 因此,注意pow函数返回的是浮点数, ...
- 移动端H5制作安卓和IOS的坑 持续更新...
移动端H5制作安卓和IOS的坑 持续更新... 前言:最近参加公司的H5页面创意竞赛,又遇到不少页面在不同系统上的坑.踩坑之余,觉得很多之前遇到的知识点都忘了,索性开一篇博文,把这些坑都统一归纳起来, ...
- <精华篇>:iOS视频大全-持续更新
注意:新浪微博分享的资料和简书分享的资料,略有不同! 小码哥swift3.0版 斗鱼项目视频:点击下载 iOS开发25个项目实战:点击下载 2016PHP全套下载:点击下载 黑马刀哥iOS视频精选 ...
- Mysql注入小tips --持续更新中
学习Web安全好几年了,接触最多的是Sql注入,一直最不熟悉的也是Sql注入.OWASP中,Sql注入危害绝对是Top1.花了一点时间研究了下Mysql类型的注入. 文章中的tips将会持续更新,先说 ...
- iOS知识点持续更新。。。
1.自动布局拉伸和压缩优先级 Autolayout中每个约束都有一个优先级,优先级的范围是1~1000.创建一个约束,默认的优先级最高是1000. Content Hugging Priority:该 ...
- 爆炸!iOS资源大礼包(持续更新...)
今天为大家整理了一些关于iOS学习的干货,献给正在奋斗的你们,首先声明一下,在整理的过程中参考了大量的博客和文章,知识的分享终究会增值,在此表示感谢,希望这篇文章给大家带来帮助. 基础部分: C语言教 ...
- iOS小知识点大杂烩
转自OPEN经验 1,打印View所有子视图 po [[self view]recursiveDescription] 2,layoutSubviews调用的调用时机 * 当视图第一次显示的时候会被调 ...
- ES2015也就是ES6知识点持续更新
ES6,全名:ECMAScript2015,先扯点其他的,ECMA是一个国际标准化组织,它最重要最重要的作用就是让ECMAScript这门语言标准化,什么意思呢?我们知道,js这门脚本语言是运行在浏览 ...
随机推荐
- 【接口开发】浅谈 SOAP Webserver 与 Restful Webserver 区别
接口,强大,简单,交互,跨越平台 下面简单阐述这两大接口思想 一 REST: REST是一种架构风格,其核心是面向资源,REST专门针对网络应用设计和开发方式,以降低开发的复杂性,提高系统的可伸缩性. ...
- 玩转spring boot——MVC应用
如何快速搭建一个MCV程序? 参照spring官方例子:https://spring.io/guides/gs/serving-web-content/ 一.spring mvc结合thymeleaf ...
- 从c#角度看万能密码SQL注入漏洞
以前学习渗透时,虽然也玩过万能密码SQL注入漏洞登陆网站后台,但仅仅会用,并不理解其原理. 今天学习c#数据库这一块,正好学到了这方面的知识,才明白原来是怎么回事. 众所周知的万能密码SQL注入漏洞, ...
- IOS之Objective-C学习 ARC下的单例模式
单例模式是我常用的一种设计模式,最常见的用途就是用来保存数据并且传递数据.这都归功于单例模式的特性,首先就让我为大家简单介绍一下单例模式的特性. 单例模式的三大特性: 1.某个类只能有一个实例: 2. ...
- Linux网络属性配置
目录 IP地址分类 如何将Linux主机接入到网络中 网络接口的命名方式 ifcfg系列命令 如何配置主机名 如何配置DNS服务器指向 iproute2系列命令 Linux管理网络服务 永久生效配置路 ...
- python之类介绍
python对象销毁(垃圾回收): 1>同Java语言一样,python使用了引用计数这一简单计数来追踪内存中的对象,也就是说,python内部记录着所有使用中的对象各有多少引用,一个内部跟踪变 ...
- Linux服务器安全配置
众所周知,网络安全是一个非常重要的课题,而服务器是网络安全中最关键的环节.Linux被认为是一个比较安全的Internet服务器,作为一种开放源代码操作系统,一旦Linux系统中发现有安全漏洞,Int ...
- mono for android学习过程系列教程(4)
今天要讲的事情是构建安卓程序的UI界面. 首先给大家上点小点心,如图: 上面就是我们界面的设计模块,仔细看中间大块的下方,有一个Source,这就类似webform里面的设计和源代码界面. 在这个页面 ...
- .Net中的AOP系列之《拦截位置》
返回<.Net中的AOP>系列学习总目录 本篇目录 位置拦截 .Net中的字段和属性 PostSharp位置拦截 真实案例--懒加载 .Net中的懒加载 使用AOP实现懒加载 如何懒加载字 ...
- 我对BFC的理解
最初这篇文章打算回答寒冬大神的第一问,谈谈CSS布局.本来呢我以为布局主要涉及float跟display相关属性,以及他们的包含框.静态位置等等.后来看了大神的一片面试文章,嗯?这里怎么还有个BFC, ...