IOS 一些小知识点整理


NSArray 类定义的方法

1.  makeObjectsPerformSelector:@select(aMethod)

让数组中的每个元素 都调用 aMethod 

2. makeObjectsPerformSelector:@select(aMethod) withObject:oneObject

让数组中的每个元素 都调用 aMethod  并把 withObject 后边的 oneObject 对象做为参数传给方法aMethod


cocoa当中的函数调用
使用methodForSelector:来避免动态绑定将减少大部分消息的开销,但是这只有在指定的消息被重复发送很多次时才有意义,例如上面的for循环。
注意,methodForSelector:是Cocoa运行时系统的提供的功能,而不是Objective-C语言本身的功能。

几个重要的辅助函数,可以在使用过程中起到很好的辅助作用,尤其是在动态编译等起到了比较大的作用。
我们可以通过NSObject的一些方法获取运行时信息或动态执行一些消息:
 class   返回对象的类;
 isKindOfClass 和 isMemberOfClass检查对象是否在指定的类继承体系中;
 respondsToSelector 检查对象能否相应指定的消息;
 conformsToProtocol 检查对象是否实现了指定协议类的方法;
 methodForSelector  返回指定方法实现的地址。
 performSelector:withObject 执行SEL 所指代的方法。

分割线-----------------


A和B都是view的子视图。
A放置在B前面。现在点击了A。B响应了点击事件,这是为什么
把imageview的userInteractionEnabled设置成yes就不穿透了。

IOS7.0以后关于nav和tabbar的一些设置
if([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0)
    {
        self.automaticallyAdjustsScrollViewInsets = NO;
        
        self.edgesForExtendedLayout = UIRectEdgeNone;
        self.extendedLayoutIncludesOpaqueBars = NO;
        self.modalPresentationCapturesStatusBarAppearance = NO;
        
        self.navigationController.navigationBar.barTintColor =[UIColor grayColor];
        self.tabBarController.tabBar.barTintColor =[UIColor grayColor];
    }



9⃣️切片    一般用于图片不够大需要拉伸的时候 横竖都可以切,讲一下横向:三条线,分成两个区域,亮色,灰色。这两个区域都代表可以拉伸,注意线的外部不拉伸。亮色区域代表无限重复拉伸,灰色区域代表不重复拉伸。


/*
    tableviewcell的重用问题:由于一直在百度上拿代码,很少去记。现在忽然发现百度搜索没有那么好用了,搜一个cell重用,搜了几十个网页都没找到正确答案。心碎了,于是在这里记一下
 

 1. dequeueReusableCell这个代表重用  所有的重用都会造成一定的问题


    [self.tableView registerClass:[CustomCell class] forCellReuseIdentifier:@"CustomCell"];

     UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];


    注意:这个地方使用_forIndexPath的前提是使用了register方法,配套使用。

 2. 第二种重用需要XIB设置cellmark        如果直接使用重用会造成页面重叠问题
    static NSString *cellMark = @"cell";
    PHTableViewCell *VCell = [tableView dequeueReusableCellWithIdentifier:cellMark];
    if (VCell == nil) {
    VCell = [[NSBundle mainBundle] loadNibNamed:@"PHTableViewCell" owner:nil options:nil].lastObject;
    }
 
 3. 不要使用模拟器去测试,会出现各种问题
 */

分割线-----------------




自定义导航栏
  //1.背景色
    [[UINavigationBar appearance] setBarTintColor:UIColorFromRGB(0x067AB5)];
    //2.设置背景图
    //[[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"NavigationBarDefault"] forBarMetrics:UIBarMetricsDefault];
    //[[UINavigationBar appearance]setBackgroundImage:[UIImage imageNamed:@"NavigationBarLandscapePhone"] forBarMetrics:UIBarMetricsLandscapePhone];
    //3.设置按钮上文字的颜色
    [[UINavigationBar appearance] setTintColor:[UIColor whiteColor]];
    //4.设置有导航栏时,状态栏的颜色风格
    [[UINavigationBar appearance] setBarStyle:UIBarStyleBlack];
    //5.设置导航栏返回按钮的箭头样式
    [[UINavigationBar appearance] setBackIndicatorImage:[UIImage imageNamed:@"back_btn"]];
    [[UINavigationBar appearance]setBackIndicatorTransitionMaskImage:[UIImage imageNamed:@"back_btn"]];
    //6.设置导航栏标题的字体样式
    NSShadow *shadow = [[NSShadow alloc]init];
    shadow.shadowColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.8];
    shadow.shadowOffset = CGSizeMake(2, 2);
    NSDictionary *textAttributes = [NSDictionary dictionaryWithObjectsAndKeys:[UIColor whiteColor],NSForegroundColorAttributeName,shadow,NSShadowAttributeName,[UIFont fontWithName:@"Helvetica" size:21.0],NSFontAttributeName,nil];
    [[UINavigationBar appearance]setTitleTextAttributes:textAttributes];




[UINavigationBar appearance]这种写法代表对所有此类型的控件生效




Animation  


CAAnimation可分为四种:
* 1.CABasicAnimation
* 通过设定起始点,终点,时间,动画会沿着你这设定点进行移动。可以看做特殊的CAKeyFrameAnimation
* 2.CAKeyframeAnimation
* Keyframe顾名思义就是关键点的frame,你可以通过设定CALayer的始点、中间关键点、终点的frame,时间,动画会沿你设定的轨迹进行移动
* 3.CAAnimationGroup
* Group也就是组合的意思,就是把对这个Layer的所有动画都组合起来。PS:一个layer设定了很多动画,他们都会同时执行,如何按顺序执行我到时候再讲。
* 4.CATransition
* 这个就是苹果帮开发者封装好的一些动画


*   @param type                动画过渡类型
 *   @param subType             动画过渡方向(子类型)
 *   @param duration            动画持续时间
 *   @param timingFunction      动画定时函数属性
 *   @param theView             需要添加动画的view.

translationInView:A这个View相对于父View的rect  
locationInView:我们在屏幕上面的手指相对于View的位置,手指移动,每次的值都是不一样的  
velocityInView:速度,比如我们拖动一个View,这个值就是View相对父View拖动的速度,


UIViewAnimationOptionLayoutSubviews //提交动画的时候布局子控件,表示子控件将和父控件一同动画。
UIViewAnimationOptionAllowUserInteraction //动画时允许用户交流,比如触摸
UIViewAnimationOptionBeginFromCurrentState //从当前状态开始动画
UIViewAnimationOptionRepeat //动画无限重复
UIViewAnimationOptionAutoreverse //执行动画回路,前提是设置动画无限重复
UIViewAnimationOptionOverrideInheritedDuration //忽略外层动画嵌套的执行时间
UIViewAnimationOptionOverrideInheritedCurve //忽略外层动画嵌套的时间变化曲线
UIViewAnimationOptionAllowAnimatedContent //通过改变属性和重绘实现动画效果,如果key没有提交动画将使用快照
UIViewAnimationOptionShowHideTransitionViews //用显隐的方式替代添加移除图层的动画效果
UIViewAnimationOptionOverrideInheritedOptions //忽略嵌套继承的选项
//时间函数曲线相关
UIViewAnimationOptionCurveEaseInOut //时间曲线函数,由慢到快
UIViewAnimationOptionCurveEaseIn //时间曲线函数,由慢到特别快
UIViewAnimationOptionCurveEaseOut //时间曲线函数,由快到慢
UIViewAnimationOptionCurveLinear //时间曲线函数,匀速
//转场动画相关的
UIViewAnimationOptionTransitionNone //无转场动画
UIViewAnimationOptionTransitionFlipFromLeft //转场从左翻转
UIViewAnimationOptionTransitionFlipFromRight //转场从右翻转
UIViewAnimationOptionTransitionCurlUp //上卷转场
UIViewAnimationOptionTransitionCurlDown //下卷转场
UIViewAnimationOptionTransitionCrossDissolve //转场交叉消失
UIViewAnimationOptionTransitionFlipFromTop //转场从上翻转
UIViewAnimationOptionTransitionFlipFromBottom //转场从下翻转

关于最后一组转场动画它一般是用在这个方法中的:
    [UIView transitionFromView: toView: duration: options: completion:^(BOOL finished) {}];
 该方法效果是插入一面视图移除一面视图,期间可以使用一些转场动画效果。


iOS7中苹果在 UIView(UIViewAnimationWithBlocks) 加入了一个新的制作弹性动画的工厂方法
+ (void)animateWithDuration:(NSTimeInterval)duration delay:(NSTimeInterval)delay usingSpringWithDamping:(CGFloat)dampingRatio initialSpringVelocity:(CGFloat)velocity options:(UIViewAnimationOptions)options animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion NS_AVAILABLE_IOS(7_0);


分割线-----------------


绘制路径
    /*
     
    1、CGPathCreateMutable 函数
    
    创建一个CGMutablePathRef 的可变路径,并返回其句柄。
    
    2、CGPathMoveToPoint 过程
    
    在路径上移动当前画笔的位置到一个点,这个点由CGPoint 类型的参数指定。
    
    3、CGPathAddLineToPoint 过程
    
    从当前的画笔位置向指定位置(同样由CGPoint类型的值指定)绘制线段
    
    4、CGContextAddPath 过程
    
    添加一个由句柄指定的路径的图形上下文,准备用于绘图
    
    5、CGContextDrawPath 过程
    
    在图形上下文中绘制给出的路径。
    
    6、CGPathRelease 过程
    
    释放为路径句柄分配的内存。
    
    7、CGPathAddRect 过程
    
    向路径添加一个矩形。矩形的边界由一个CGRect 结构体指定。

    
     *创建一个新的可变路径(CGPathCreateMutable),把该路径加到你的图形上下文(CGContextAddPath)
     
     *并把它绘制到图形上下文中(CGContextDrawPath)
     
     */

分割线-----------------



MRC和ARC混编设置方式
在XCode中targets的build phases选项下Compile Sources下选择 不需要arc编译的文件
双击输入 -fno-objc-arc 即可
MRC工程中也可以使用ARC的类,方法如下:
在XCode中targets的build phases选项下Compile Sources下选择要使用arc编译的文件
双击输入 -fobjc-arc 即可

修改textFieldplaceholder字体颜色和大小
textField.placeholder = @"请输入用户名";  
[textField setValue:[UIColor redColor] forKeyPath:@"_placeholderLabel.textColor"];  
[textField setValue:[UIFont boldSystemFontOfSize:16] forKeyPath:@"_placeholderLabel.font"];

UITableView设置Section间距
在使用UITableViewStyleGrouped类型的UITableView的时候,经常很奇怪的出现多余的section间距,那可能是因为你 只设置了footer或者header的间距中的其中一个,他们是成对出现那么另一个默认为20个高度,只需要设置返回0.001的CGFlot的浮点数就可以解决这个 多余的间距。

UIView的clipsTobounds属性
view2添加view1到中,如果view2大于view1,或者view2的坐标不全在view1的范围内,view2是盖着view1的,意思就是 超出的部份也会画出来,UIView有一个属性,clipsTobounds 默认情况下是NO。如果,我们想要view2把超出的那部份现实出来,就得改变它的父视图也就view1的clipsTobounds属性值。 view1.clipsTobounds = YES;
可以很好地解决覆盖的问题



other linker flags:
它的设置关乎到项目编译时的链接方式。
-ObjC:加了这个参数后,链接器就会把静态库中所有的Objective-C类和分类都加载到最后的可执行文件中
-all_load: 会让链接器把所有找到的目标文件都加载到可执行文件中,但是千万不要随便使用这个参数!假如你使用了不止一个静态库文件,然后又使用了这个参数,那么你很 有可能会遇到ld: duplicate symbol错误,因为不同的库文件里面可能会有相同的目标文件,所以建议在遇到-ObjC失效的情况下使用-force_load参数。
-force_load:所做的事情跟-all_load其实是一样的,但是-force_load需要指定要进行全部加载的库文件的路径,这样的话,你就只是完全加载了一个库文件,不影响其余库文件的按需加载


分割--------

类方法(+)不可以使用实例变量。类方法可以使用self
实例方法里面的self,是对象的首地址。

类方法里面的self,是Class

其实最主要的区别是类方法不需要声明一个对象(也可以叫做实例)  可以直接调用 ,但是实例方法必须声明对象

关于OC中属性其实正确调用应该是[class property]   为什么可以直接对象.呢。因为@property 自动实现了getter setter方法

http://www.2cto.com/kf/201412/361299.html


UIView的子类初始化的时候,不要进行任何的布局操作。布局操作应该在layoutSubviews里面做;需要重新布局的时候调用setNeedsLayout,而不要直接调用layoutSubviews。(初学者)

模拟器nav Push和pop转场动画变快变慢: 选中模拟器->Debug->slow  animation


640x960, 640x1136, 750x1334, 1242x2208
320x480,320x568,375x667,414x736


AsyncSocket  GCDAsyncSocket     知页简历  模板

做高德地图的时候,一定要注意方法顺序。尽可能不要重复方法
regionThatFits 地图自动适应。


sudo rm -rf 解决文件无法删除问题





一些好的知识网站:

JQuery
http://www.runoob.com/jquery/jquery-examples.html

推送相关
http://www.cnblogs.com/menglingzhi/p/5638018.html

Runtime
http://www.code4app.com/thread-9849-1-1.html
http://www.code4app.com/blog-721976-204.html  介绍

IOS个人博客资料
https://github.com/hawx1993/Front-end-Interview-questions/blob/master/README.md

IOS9 AppStore新应用提审
http://mp.weixin.qq.com/s?__biz=MjM5OTM0MzIwMQ==&mid=400430503&idx=4&sn=79df176720c8d4ee1dacf86357e15e04&scene=23&srcid=1029DzU01khEMM8PDoWXZNR3#wechat_redirect
迭代应用
https://itunesconnect.apple.com/WebObjects/iTunesConnect.woa/ra/ng/

goole访问网站
http://blog.sina.com.cn/s/blog_56265c9e0102vqw9.html


日期格式
http://blog.csdn.net/ouyangtianhan/article/details/45921389

时间相关方法
http://moto0421.iteye.com/blog/1586592
http://www.cnblogs.com/wayne23/archive/2013/03/25/2981009.html


推送
http://www.2cto.com/kf/201401/274532.html

博客
http://blog.csdn.net/shenjie12345678/article/category/2224111
http://blog.sina.com.cn/s/articlelist_2073912495_0_2.html

IOS 解决三方静态库冲突
http://www.cnblogs.com/rayshen/p/5160218.html


应用程序生命周期
http://www.2cto.com/kf/201210/159581.html

数组各项操作
http://blog.sina.com.cn/s/blog_702e40a80101gagf.html

JS与OC交互
http://www.cocoachina.com/ios/20160127/15105.html

简单特效效果
http://www.cnblogs.com/dsxniubility/


iOS学习路之Objective-C(二)—— 字符串
http://www.tuicool.com/articles/AJZBjqY

Block详解
http://my.oschina.net/leejan97/blog/268536


IOS解析
http://blog.csdn.net/banketree/article/details/39928441

高德地图获取经纬度
http://www.gpsspg.com/maps.htm

iOS8跳转到系统设置页
http://blog.csdn.net/showhilllee/article/details/44057403


27个IOS开源库
http://www.jianshu.com/p/228535226656

iOS 系统架构及常用框架
http://www.cnblogs.com/leo_wl/p/3629606.html
https://mp.weixin.qq.com/s?__biz=MzA3NzM0NzkxMQ==&mid=2655357820&idx=2&sn=b90298ca5d4f777ecfa9bfb60df3e76a&scene=0&key=f5c31ae61525f82e522bd261a07e1a07f66af5af15c95244f1b0f74943c8db5f0f9e5447e0ef2263888738dd35e2ab54&ascene=0&uin=MjkzMzQ5MTU%3D&devicetype=iMac14%2C4+OSX+OSX+10.11.1+build(15B42)&version=11020201&pass_ticket=5TDjeRDHQolMUHrcb0MOiVNIa%2FdnBP41%2FgIDaOJQ2FA%3D


IOS git资料
http://github.ibireme.com/github/list/ios

T-ARA皇冠资源总站
http://tarabar.lofter.com

IOS视频边下边播—缓存播放数据流
http://www.jianshu.com/p/990ee3db0563

真机调试、打包测试、发布程序常见问题
http://www.jianshu.com/p/a9f818ac1066

CGAFfineTransform    Animal
http://www.daxueit.com/article/5609.html
http://www.th7.cn/Program/IOS/201312/165775.shtml
IOS keyPath
http://blog.sina.com.cn/s/blog_66c830cf0102v9t4.html
继承上一篇讲述CABasic的一些属性
http://blog.csdn.net/smking/article/details/8424245
动画的一些详解
http://www.cnblogs.com/wengzilin/p/4250957.html
http://www.cnblogs.com/lee0oo0/p/4225730.html


动态库封装
http://nixwang.com/2015/11/09/ios-dynamic-update/?utm_source=tuicool&utm_medium=referral


如何在网页唤醒一个APP  可以传递参数
http://www.cocoachina.com/industry/20140522/8514.html


--------分割--------



深浅Copy
http://www.brighttj.com/ios/oc-copy-mutablecopy.html


NSOperationQueue
http://www.jianshu.com/p/0c241a4918bf

IOS常用知识点
http://m.blog.csdn.net/article/details?id=52180380


IntelliJ IDEA 注册码
http://idea.lanyus.com/


H5混编
https://ke.qq.com/course/80126?_bid=167&_wv=3&from=iosapp

免费API接口
http://www.jianshu.com/p/a2a8e91b2418

ARC下的内存泄露
https://www.zybuluo.com/MicroCai/note/67734

MVVM
http://www.olinone.com/?p=510

git rebase和merge的区别
http://blog.csdn.net/wh_19910525/article/details/7554489

git push命令
http://blog.csdn.net/jo__yang/article/details/50972807


React Native学习
http://reactnative.cn/docs/0.28/getting-started.html
http://www.tuicool.com/articles/zaInUbA

Strong和Weak的区别
http://blog.csdn.net/q199109106q/article/details/8565017



--------分割--------

IOS 整理

Git 命令行:
pull之前需要先把改变的工作放到缓存区
git stash
git pull
git stash pop
git add .
git commit -m “”
git push
git push -d origin devel  删除远程分支
git branch -D devel 删除本地分支
git checkout -b devel 创建本地分支
git branch —all   查看全部分支(远程)
git pull -p  拉取分支
git push origin devel 推送本地分支到远程



AFN结构



SDWebImage的几点特性
* 为UIImageView,UIButton和MKAnnotationView进行了类别扩展,添加了web图片和缓存管理;
* 是一个异步图片下载器;
* 异步的内存+硬盘缓冲以及自动的缓冲过期处理;
* 后台图片解压缩功能;
* 可以保证相同的url(图片的检索key)不会被重复多次下载;
* 可以保证假的无效url不会不断尝试去加载;
* 保证主线程不会被阻塞;
* 性能高;
* 使用GCD和ARC;



IOS后台运行
(BOOL)setKeepAliveTimeout:(NSTimeInterval)timeouthandler:(void (^)(void))keepAliveHandler
函数功能:app每隔timeout唤醒一次。
0.要成功调用该函数,就必须在Info.plist里设UIBackgroundModes键的array值之一voip字符串.
1.timeout必须>=600
2.唤醒app的时间间隔是不精准的。
3.唤醒后只有10秒执行时间。即handler里的代码要在10秒类执行完。10秒后app再次被阻塞。
(可以用-backgroundTimeRemaining属性来返回剩余时间)
4.该函数成功调用后,在程序生命周期内有效。
该函数的效果在回到前台的状况下,依然有效。(因此可以把它当timer使.)
5.clearKeepAliveTimeout函数用来清除handler。



ViewController的self释放的三种情况
  1.1 delegate没有置空nil
  1.2 block循环引用,应当在block中使用weakSelf来引用:__weak typeof(self) weakSelf = self;
  1.3 NSTimer必须先停止(invalidate)然后nil掉。


Content Hugging Priority: 该优先级表示一个控件抗被拉伸的优先级。优先级越高,越不容易被拉伸,默认是250。
指的是view拒绝拉伸。Priority 优先级越高,view越难被拉伸。
值越小越容易被拉伸。


Content Compression Resistance Priority: 该优先级和上面那个优先级相对应,表示一个控件抗压缩的优先级。优先级越高,越不容易被压缩,默认是750
指的是view拒绝压缩内置空间。Priority越高,view的内置空间会越难被压缩。而这里的内置空间,就是上面说的view的intrinsicContentSize。
值越大 内部空间越容易被拉伸

内置大小:UILabel,UIButton等控件,他们都有自己的内置大小。控件的内置大小往往是由控件本身的内容所决定的,比如一个UILabel的文字很长,那么该UILabel的内置大小自然会很长。
















  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值