0.哪些英文的报错,最好用有道翻译一下(百度的貌似更不准),即使不准确,有时候也能充当参考。
莫慌,断点调试,特别是index
.xib里的继承更简单,直接在class里填
3.office工具拉窄会看不到工具栏的
4.终端输入uname -m可以看到i386,表明内核是32位的如果输出是x86_64就是64位的
5.20pt * 2x = 40像素
6.图片双击左键点开,然后选文件,导出哪里可以转格式
7.百分号的转换,NSString中需要格式化的字符串中百分号使用%%表示,而char*中百分号也是使用%%表示。
例如:NSLog(@"%%%@%%",@"hello"),控制台会打印出%hello%。
8.像UITableView,UIWebView之类的都是复合视图,值得一提的是像UItableView感觉拖得偏移很大,其实该UITableView的frame并没有变哟。
9.父类有的子类必有,跟但凡布局,只有确定x,y,width,height一样,是很重要的思想。
10.子类跟父类方法,除了重写重载,还有就是直接调用
if ()括号里指向空地址,会为NO
12.无论接口的数据结构怎么样,多少层,但是我的model我做主
13.排序
14.一个容易疏忽的bug,字典的key多了空格
15.不开源的外来库是要 Link Binary With Libaries才能加入项目中,跟一般的文件不同,不是Add Files to的形式,不过,开源的是可以直接Add Files to的
16.mode(或数据)与view分开的好处是:你看到的只是我想让你看到的!;
17.假如必须满足两个条件,就不能这样写
if(条件1){
}else if (条件2){
}
这种写法只要有一个条件满足就不会走下一个,切记
- 按钮文字自适应变小
btn.titleLabel.adjustsFontSizeToFitWidth = YES;
19.即使是继承,也没法用父类m文件里import到的文件,一定要写在h文件那里
20.有的闪退是iOS手机系统版本,没有那方法造成的,注意啦
21.若想通过
[self.dataTableview addPullUpLoadMoreWithTarget:self action:@selector(loadMoreData)];
实现上拉加载更多,一定要加上判断
if (self.poiInfoList.count == 0 || _curPage == 0){
self.poiInfoList = [NSMutableArray arrayWithArray:result.poiInfoList];
}else{
[self.poiInfoList addObjectsFromArray:result.poiInfoList];
}
[self.dataTableview reloadData];
if (result.poiInfoList.count < page_capacity){
[self.dataTableview canNotLoadMore];
}else {
[self.dataTableview canLoadMore];
}
否则不起作用
22.如果是用autolayout布局,建议以小的iPhone屏幕比例进行布局。原因:一小的布局,去到大屏时,若是异常了,至少也就是拉伸比例不对。但是如果是一开始按照大屏的去布局,去到小屏,若是异常,那么很有可能因为压缩而重叠遮住,导致看不见
23.貌似跑真机会电脑会卡很多
24.对于一些UI上的问题,或许可以通过加动画,延时来调试其问题所在
25.手势 + 绘图 + 动画 ,能做出很炫酷的效果
26.UITableView的cell下划线靠左显示
27.并不是局部变量(特指类,不指基本数据类型,基本数据类型有空再测试一下)函数跑完就会被释放掉,如果被引用,引计数不为0,即使不是属性持有,也不会释放的,还是那个对象,还是那个熟悉的味道。
28.iOS 隐藏百度地图SDK的百度LOGO
29.UITextField-修改占位文字和光标的颜色,大小
30.用纯代码布局UI的时候,给个序号 + 文字描述的注释是一个好习惯。
31,没有什么是断点解决不了的,
32.结构体是基本数据类型
33.就目前来讲,在UITextfield里面的leftView/rightView里面调空隙,最好是来一个透明的底view上面再叠一个子view
34,截止发稿,delegate比较奇葩的问题就是其没有实例,或者实例又被释放掉了,另外,对于
这种的,可以在viewWillAppear的时候,断点,从self里面找delegate,看是不是释放了
35.UISearchBar ,pop回来颜色不一致,可以设置其barTintColor统一
36.实现搜索条背景透明化
//设置
UIImage* searchBarBg = [self GetImageWithColor:[UIColor clearColor] andHeight:32.0f];
[_searchBar setBackgroundImage:searchBarBg];
//设置的方法
- (UIImage*) GetImageWithColor:(UIColor*)color andHeight:(CGFloat)height{
CGRect r= CGRectMake(0.0f, 0.0f, 1.0f, height);
UIGraphicsBeginImageContext(r.size);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetFillColorWithColor(context, [color CGColor]);
CGContextFillRect(context, r);
UIImage *img = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return img;
}
有时候网络请求失败,有可能是请求或应答的解析格式跟后台要求的不一致。
38.无论是controller还是自定义view,工厂方法想要扩展,就需要在h文件那里声明。
39.刷新cell的某一行
//一个section刷新
NSIndexSet *indexSet=[[NSIndexSet alloc]initWithIndex:1]; //你需要更新的组数
[tableview reloadSections:indexSet withRowAnimation:UITableViewRowAnimationAutomatic]; //collection 相同
//一个cell刷新
NSIndexPath *indexPath=[NSIndexPath indexPathForRow:3 inSection:0]; //你需要更新的组数中的cell
[tableView reloadRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath,nil] withRowAnimation:UITableViewRowAnimationNone]; //collection 相同
40.textView没有textField那样的代理里面响应return键的回调:textFieldShouldReturn:
如要处理类似的需求,只能通过取巧的方式去解决:
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text{
if ([text isEqualToString:@"\n"]){ //判断输入的字是否是回车,即按下return
//在这里做你响应return键的代码
return NO; //这里返回NO,就代表return键值失效,即页面上按下return,不会出现换行,如果为yes,则输入页面会换行
}
return YES;
}
41.有一个比较让人纠结的事情就是,contentOffset(偏移量),但是偏移量,不用一个差值来表示,居然用一个点来表示,没错就是CGPoint。
其实这种方式有点取巧了,因为偏移量是以frame的原点(0,0),contentOffset.y=内容的顶部和frame顶部的差值,contentOffset.x=内容的左边和frame左边的差值
。换言之,这里的偏移点,既是点,也是偏移量,唯一不同的是,正负更多的是表示方向的意思。ps:1.contentSize:即内容,就是scrollview可以滚动的区域。2.contentInset:即内边距,contentInset = 在内容周围增加的间距(粘着内容),contentInset的单位是UIEdgeInsets,默认值为UIEdgeInsetsZero。
42.触摸事件跟手势略有不同
43.tableView.allowsSelection = NO;
/ default is YES. Controls whether rows can be selected when not in editing mode
换言之,tableview可以滑动,不像_dataTableView.userInteractionEnabled = NO;直接锁死,连滑都不能。但是子控件里有“编辑”的,如UItextView则不起作用,
44.tablefooterView的底view一定被拉开屏幕的宽
45.宏定义传参
#define DOMAINJOINTSUB(PARAM) [job_HeadDomainName stringByAppendingString:PARAM]
46,Mac解压rar文件
感觉强转的最大作用就是编译的时候不报错
UIKeyboardType 11种键盘图片展示
一个null值给了UILabel的text,因为网络是异步的,所以没有立即闪退。
ps:异步的导致闪退延迟要小心了
50.self.layer.borderColor = [UIColor colorWithRed:33/255.0 green:33/255.0 blue:33/255.0 alpha:0].CGColor;
透明不是颜色
别被[UIColor clearColor];
骗了
51.【ios】ARC中重写NSObject的dealloc方法的一个小细节
比如一个继承一个TextView,subTextView(子类),就算是子父之间的关系,父级的delegate,子类还是要指定,才能用,(跟“外人”差不多)。而且子类的实例,即子实例同时指定delegate,则子类里的delegate是失效的喔。
但是为了模块封装的思想,还是建议在子类里面写delegate,比如UITextView的子类要对外delegate的话,可以写个新的,不跟TextView一样重名的delegate,(重名会报错的)比如newDelegate之类,
53.Git不支持上传大于100MB的文件
54.UICollectionViewCell跟UITableviewCell略有不同,UITableviewCell更多的时候,我们不用考虑宽度,但是UICollectionView的话,我们往往要考虑宽度的,所以要确保一行有四个的话,我们可以考虑用屏宽去除4
//协议中的方法,用于返回单元格的大小
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
{
return CGSizeMake(ScreenWidth/4, ScreenWidth/4+10);
}
交互的控件要点到控件最底层的“父view”才能真正发现其是不是开了交互,否则点了上层的看到“off”可能误认为没开交互
_textfield.enabled = NO;
要特别小心enabled的使用,这种使用图层是看不了的,所以还是建议用userInteractionEnabled
57.高德地图导航
58.Objective-C页面消失或出现时,判断是pop还是push操作
59.没写delegate的接受报这个错
60.父级圆角,子级会被动跟着圆角
61.UIImage类没有提供修改frame的方法,我们需要扩展UIImage类自己实现
62.warning: could not load any Objective-C class information. This will significantly reduce the quality of type information available.
63.ipa包就是二进制包
64.xcode的版本太低,如其不支持ios10.0.0 以上的,跑模拟器的时候,你会发现没有模拟器可选,这时只要把支持的ios系统版本调低即可。或者升级xcode
65.其实单例最大的作用就是封装,方法该调用还得调用,delegate该回调的还得回调,算是有一点点神秘甘啦
delegate除了像平时那接
67.iOS开发UI篇—程序启动原理和UIApplication
(1)UIApplication对象是应用程序的象征,一个UIApplication对象就代表一个应用程序。
(2)每一个应用都有自己的UIApplication对象,而且是单例的,如果试图在程序中新建一个UIApplication对象,那么将报错提示。
(3)通过[UIApplicationsharedApplication]可以获得这个单例对象
(4) 一个iOS程序启动后创建的第一个对象就是UIApplication对象,且只有一个(通过代码获取两个UIApplication对象,打印地址可以看出地址是相同的)。
(5)利用UIApplication对象,能进行一些应用级别的操作
68.OOP
面向对象编程(Object Oriented Programming,OOP,面向对象程序设计)是一种计算机编程架构。OOP 的一条基本原则是计算机程序是由单个能够起到子程序作用的单元或对象组合而成。
OOP 达到了软件工程的三个主要目标:重用性、灵活性和扩展性。为了实现整体运算,每个对象都能够接收信息、处理数据和向其它对象发送信息。OOP 主要有以下的概念和组件:
69.oc没有抽象类只是指语言的语法构造上没有C++/Java那样专门的abstract class定义,这并不妨碍你在用Obj C写程序的时候使用"abstract class"这一通用的OOP概念,即类的部分实现需要subclass来完成。就如同你在C里面照样可以用struct来自己实现vtable一样。
换言之,平时在oc中说得比较多的“抽象类”的用法,即是把类的部分实现需要subclass来完成,所以这时只能用子类!
70.苹果官方文档阅读的入门//寻找查看苹果官方文档的路径
71.凡是要拿私密数据的都要征求用户的意见,否则会闪
72.忍不住吐槽一下pch
在原来别人的project了引入一文件,然则报了个这鸡巴错误
百度翻译:从具有不兼容结果类型“id”的函数返回“double”
嗯,我想说的是这个报错比较难地联想到是因为少导入#import
,pch配置的文件太具有隐蔽性了
73.block赋值的时候一定要判断非nil,否则会闪
} progress:^(NSProgress * _Nonnull uploadProgress) {
NSLog(@"上传进度--%lld,总进度---%lld",uploadProgress.completedUnitCount,uploadProgress.totalUnitCount);
if (progress)
{
progress(uploadProgress.completedUnitCount, uploadProgress.totalUnitCount);
}
这个其实跟delegate先判断有无的写法类似
74.info.plist其实就是全局配置的意思。
75.听说TCP跟UDP的区别是,TCP其实也是从UDP哪里来,只不过是对UDP进行了链接校验和去重处理了
76.TCP的三次握手(四次断开),其实是为了确保链接的状态。可靠性也更强,详情可参考:为什么TCP连接需要三次握手分开需要四次握手?
77.FDFullscreenPopGesture,半屏左右滑的第三方
78.详解URL的组成
2.域名部分:该URL的域名部分为“www.aspxfans.com”。一个URL中,也可以使用IP地址作为域名使用
3.端口部分:跟在域名后面的是端口,域名和端口之间使用“:”作为分隔符。端口不是一个URL必须的部分,如果省略端口部分,将采用默认端口
79. ios 字典enumerateKeysAndObjectsUsingBlock遍历
80.反正跟“码”相关的,意思都是和规定好的与机器的交互指令相关。
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
request.HTTPBody
http也分头和体的,难不成也是遵循了IP数据报的格式
文件拖到工程下,但是没有add进去的话,强行引用没报错,引用静态库那样,但是运行起来的话,会因为找不到而闪退
一般来讲子view先设置x和y是相对于父视图的,但是像tableHeaderView要赋值的view,先设置x和y是不起作用的
84.把加通知观察者的方法写到UIViewController里面的最大好处,特别是该viewController是底部tabbar其中一员却又不是第一个,那么如果有通知的话,不用去到那个viewController即可收到通知了,因为,通知至少要加上实例出来的对象一次才起作用。
85.xcode升上去的不用删了重新拖系统库,直接装的貌似要,否则报找不到
86.SQL语句貌似有下划线的那种都是关键字
87.貌似断点断不了定时器
88.改静态库对外的h文件,或者多工程的子工程对外的h文件是不起作用的,比如,
要改原文件才行
89.一般公共的view都喜欢add在keyWindow上
90.自适应cell的高度如果cell是图片的话,方案一,要么接收的时候就知道图片的比例,方案二,要么就是把图片先存本地,然后拿出来计算比例后显示,这种时候切记不要用SDImage的动态加载URL的方式(虽然有那么一丢丢的缓存,然还是不好处理),因为本来就是变高度的,然后URL的话又是动态加载,最要命的是还会网络延时,简直乱成一锅粥,容易顾此失彼,这种时候要懂得做减法
91.NSTimeInterval本身是个秒级别的double类型数值,小数点后面即毫秒数,*1000.0f即可得到毫秒级别的时间差,oc中的写法是
(NSInteger)([[NSDate date] timeIntervalSince1970] * 1000);
92.获取NSArray的前几个元素,取数组中某个元素
93.时间戳的意思就是时间间隔(统一以1970年为起点相差)
所以,[NSDate date]是当前时间
[[NSDate date] timeIntervalSince1970]是当前时间距离1970的时间间隔,两者是不同概念的
94.block的传入参数,在定义的时候可以用,回调之后也可以用,可以说这个机制非常好。
xcode有时会痴线左,myIconStr这个字符串明明是有值的(打印出来才发现),但是却显示为空
96.动画可能引发很多布局的问题
什么是UDID?
UDID,是iOS设备的一个唯一识别码,每台iOS设备都有一个独一无二的编码,这个编码,我们称之为识别码,也叫做UDID( Unique Device Identifier)。
所谓的适配其实就是按照比例来。
mjrefresh
_tableView.mj_header = [MJRefreshNormalHeader headerWithRefreshingTarget:self refreshingAction:@selector(loadNewData)];
tableV.mj_header = [MJRefreshHeader headerWithRefreshingTarget:self refreshingAction:@selector(p_loadData)];
MJRefreshHeader这种是没提示的
100.项目的bundleId,有时候跟自己的苹果账号绑定的,而bundleId因为是全球唯一的,如果账号provisioning Profile不了,可能是bundleID重复了,可以试着改一下bundleId。