网站建设维护费用,vue网站开发,百度站长平台网站收录,电商培训有用吗1. 关于纠结很久的KVO崩溃问题#xff0c;其真正原因是#xff0c;在删除roomItem的KVO之前,将这个对象已经赋值为nil,所以实际上并没有删除他的observer#xff0c;因此而崩溃#xff1b;长时间纠结的原因是受.cxx_destruct影响了思路 2.拷贝block 因为block变量默认是声明… 1. 关于纠结很久的KVO崩溃问题其真正原因是在删除roomItem的KVO之前,将这个对象已经赋值为nil,所以实际上并没有删除他的observer因此而崩溃长时间纠结的原因是受.cxx_destruct影响了思路 2.拷贝block 因为block变量默认是声明为栈变量的为了能够在block的声明域外使用所以要把block拷贝copy到堆所以说为了block属性声明和实际的操作一致最好声明为copy。 3.移除observer Observing 一个已经deallocate的对象不会引起程序crash但是notifying 一个已经deallocated 的observer会引起程序的crash。这就是为什么要在dealloc 中加入removeObserver:。所以addObserver与 removeObserver一定要成对出现。一般情况下在init方法中开始observing 在dealloc中结束observing。The notification center does not retain its observers, therefore, you must ensure that you unregister observers (using removeObserver: or removeObserver:name:object:) before they are deallocated. (If you dont, you will generate a runtime error if the center sends a message to a freed object.) 4.在拖动时使用NSTimer 在开启一个NSTimer实质上是在当前的runloop中注册了一个新的事件源而当scrollView滚动的时候当前的MainRunLoop是处于UITrackingRunLoopMode的模式下在这个模式下是不会处理NSDefaultRunLoopMode的消息(因为RunLoop Mode不一样)要想在scrollView滚动的同时也接受其它runloop的消息我们需要改变两者之间的runloopmode. [[NSRunLoop currentRunLoop] addTimer:timer forMode:NSRunLoopCommonModes]; 5. 方法 performSelectorOnMainThread: withObject: waitUntilDone:中waitUntilDone:为YES时会阻塞在当前线程等目标线程的队列中的任务完成之后才会继续运行 6.兼容使用instancetype类型#ifndef MB_INSTANCETYPE#if __has_feature(objc_instancetype)#define MB_INSTANCETYPE instancetype#else#define MB_INSTANCETYPE id#endif#endif 7.方法- (CGRect)boundingRectWithSize:(CGSize)size options:(NSStringDrawingOptions)options attributes:(NSDictionary *)attributes context:(NSStringDrawingContext *)context NS_AVAILABLE_IOS(7_0)参数解析NSStringDrawingTruncatesLastVisibleLine如果文本内容超出指定的矩形限制文本将被截去并在最后一个字符后加上省略号。 如果指定了NSStringDrawingUsesLineFragmentOrigin选项则该选项被忽略。NSStringDrawingUsesFontLeading计算行高时使用行间距。译者注字体大小行间距行高NSStringDrawingUsesLineFragmentOrigin那么整个文本将以每行组成的矩形为单位计算整个文本的尺寸。 NSStringDrawingUsesDeviceMetrics计算布局时使用图元字形而不是印刷字体。contextcontext上下文。包括一些信息例如如何调整字间距以及缩放。最终该对象包含的信息将用于文本绘制。该参数可为 nil 8.主线程:一个iOS程序运行后默认会开启1条线程称为“主线程”或“UI线程”主线程的主要作用显示\刷新UI界面处理UI事件比如点击事件、滚动事件、拖拽事件等1在子线程中是不能进行UI 更新的而可以更新的结果只是一个幻像因为子线程代码执行完毕了又自动进入到了主线程执行了子线程中的UI更新的函数栈这中间的时间非常的短就让大家误以为分线程可以更新UI。如果子线程一直在运行则子线程中的UI更新的函数栈 主线程无法获知即无法更新 2只有极少数的UI能因为开辟线程时会获取当前环境如点击某个按钮这个按钮响应的方法是开辟一个子线程在子线程中对该按钮进行UI 更新是能及时的如换标题换背景图但这没有任何意义 9.在UisearchBar中一直显示Xbutton: UITextField* textField [searchBar valueForKey:_searchField]; textField.clearButtonMode UITextFieldViewModeNever; 10.KVC获取UISearchBar中的textField:UITextField* textField [searchBar valueForKey:_searchField]; 获取UITextField中的clearButton:UIButton *clearButton [textField valueForKey:_clearButton]; 11. storyboard预览 WWDC 2013 session 406 中视频说起开启辅佐助预览窗心方式以下 1.挑选须要预览的view 2.面击左上角 related files 按钮 3.按住键盘的 control option(alt)键面击preview 选项中的storyboard选项 ;又或者可以按住 shift option键点击preview弹出一个窗口双击就会打开预览界面通过这个方式可以打开多个预览界面 选择Double Length Pseudolanguage使label等中的文字都增加一倍检查界面效果 (ps:布局可参看链接http://www.cocoachina.com/ios/20141020/9978.html) 12.添加获取用户位置权限的提示文字在App的 info.plist 中添加 NSLocationWhenInUseUsageDescription 或 NSLocationAlwaysUsageDescription 为新键然后输入告知用户请求许可的字符串。例如“显示附近的物品项需要获取您的位置。” 13. 浮点数在计算机中的存储方式就决定了它是有误差如果你需要精确的计算使用[NSDecimalNumber decimalNumberWithString:]来得到一个NSDecimalNumber可以通过这个类的函数进行加减乘除运算。 14.iOS扩展属性category可以扩展类的方法但是不能扩张类的属性。如果要扩展类的属性可以用associative这个相对于category来说用的比较少而且他还用到运行时编程必须使用obj/runtime.h,使用objc_getAssociatedObject,objc_setAssociatedObject以及objc_removeAssociatedObjects 15. UITableView提供了一个批量操作的特性这个功能在一次进行多个row或者scetion的删除插入获取更新多个cell内容的时候特别好用。所有的批量操作需要包含在beginUpdates和endUpdates块中否则会出现异常。在批量操作时不管代码中先写的添加操作还是删除操作添加操作都会被推迟执行直到这个块中所有的删除操作都执行完以后才会执行添加操作。 16. Scroll view 没有固定的高度和宽度。Scroll View 的 宽度和高度由其内容所决定即 Scroll View 的 contentSize 所决定 。内容的大小必须不依赖于 Scroll View 的尺寸。例如Content1Content2Content3 不能包含任何与 Container View 相关的 topbottomleft 和 right 的布局约束。只能包含固定宽度和高度的约束每个约束至少在得在其中之一上定义。如果任何一个 content view 都不包含这些约束则它们的大小将依赖于 Scroll View因为它们被绑定到 Scroll View 的边距但 Scroll View 又依赖于内容的尺寸这就导致矛盾冲突。 ScrollView 必须至少有一个内容绑定它的四条边例如 topleftrightbottom。这样 ScrollView 才能知道它的内容的边界在哪里即 Scroll View 的 ContentSize。 17.将controller的view添加到其他视图上时如果没有将控制器添加为对应的子控制器并且没有持有这个控制器的成员变量那么这个控制器就会被释放掉对应的控制器的view也会被释放掉这时如果在对这个view(虽然释放掉了但是如果之前显示在界面上那么他仍然显示在界面上)进行操作程序就会崩溃这就是为什么在其中添加timer就不会崩溃的原因这是因为timer持有了控制器。 18. NSTimer中的fire方法的作用是使定时器立即触发但是仅对循坏的定时器起作用对一次运行的定时器没有作用这个方法不会打乱循环执行的时间也就是对循环执行没有影响。 19.**Autolayout布局下要使用transform做动画效果使用Layer的transform并且使用图层动画不能使用视图动画。 20.iOS7系统中UIAlertView崩溃问题UIAlertView delegate is property(nonatomic, assign) id delegate, so ensure alertView.delegate nil when delegate is dealloced. 就是因为UIAlertView的代理被释放之后没有置为空所以造成崩溃。 21.Terminating app due to uncaught exception NSInvalidArgumentException, reason: -[__NSCFString objectAtIndexedSubscript:]: unrecognized selector sent to instance 0x7fff395245e0 这种崩溃往往是因为想访问数组的元素但是消息却发送给一个字符串NSString对象所以可以查找数组有可能也是字典访问的地方判断是否真正是数组对象。 22.C语言的static修饰的函数作用 1. 静态函数会被自动分配在一个一直使用的存储区直到退出应用程序实例避免了调用函数时压栈出栈速度快很多。 2. 关键字“static”译成中文就是“静态的”所以内部函数又称静态函数。但此处“static”的含义不是指存储方式而是指对函数的作用域仅局限于本文件。 使用内部函数的好处是不同的人编写不同的函数时不用担心自己定义的函数是否会与其它文件中的函数同名因为同名也没有关系。 *23.去掉项目中的警告信息#pragma GCC diagnostic ignored -Wunused-variablehttp://www.dbp-consulting.com/tutorials/SuppressingGCCWarnings.html 24.LanuchScreen在iOS8之后的系统中才能使用之前的系统是不支持它的iOS9之后http不能使用而是被https代替如果在iOS9中仍然想使用http可以参考这个设置https://segmentfault.com/a/1190000002933776 *25.苹果的根证书过期造成的证书不能使用的问题请参看链接http://www.jianshu.com/p/6bf5a30553bf 26.如何使用随机数如何产生一个真正的随机数参看链接http://nshipster.cn/random/ http://www.cnblogs.com/rupeng/p/3723018.html 27.多工程联编的配置问题https://www.ganlvji.com/xcode_subproject_project_dependency/ 28.弹性动画 (void)animateWithDuration:(NSTimeInterval)duration delay:(NSTimeInterval)delay usingSpringWithDamping:(CGFloat)dampingRation initialSpringVelocity:(CGFloat)velocity options:(UIViewAnimationOptions)options animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion的参数解析http://www.renfei.org/blog/ios-8-spring-animation.html 29.去掉tabBar上面的一条细线self.tabBar.backgroundImage [[UIImage alloc] init]; self.tabBar.shadowImage [[UIImage alloc] init]; 30.设置StatusBar不起作用的原因info.plist 文件中View controller-based status bar appearance项设为YES则View controller对status bar的设置优先级高于application的设置。为NO则以application的设置为准view controller的prefersStatusBarHidden方法无效是根本不会被调用的。设置为YES后在info.plist中再加入key为statue bar style的键值对就可以全局改变statue bar的样式。 31.UILabel在Autolayout下的多行显示参考http://www.kdfly.com/?p160 32.Content Hugging 和 Content Compression Resistance和属性的解析参看http://blog.csdn.net/yongyinmg/article/details/39526207 33. 在iOS7中UIViewController还提供了一个 automaticallyAdjustsScrollViewInsets 属性。它可以使得scroll view的上下部分仍然在各种Bar的后面以半透明的形式显示出来同时scroll的主题内容不被bar遮盖。在实际使用的时候本人发现并不是任何时候都是这样的能够生效的前提条件是UIScrollView对象是作为content view controller的root view或者是view0。 34.iOS使用定位服务弹出提示框的提示文字设置http://blog.devzeng.com/blog/ios8-corelocation-framework.html 35.更改应用使用硬件的权限应用崩溃问题请参考http://www.jianshu.com/p/ada52c520ccb 36.文字描边代码 //继承UILabel以后重载drawTextInRect- (void)drawTextInRect:(CGRect)rect { CGSize shadowOffset self.shadowOffset; UIColor *textColor self.textColor; CGContextRef c UIGraphicsGetCurrentContext(); CGContextSetLineWidth(c, 1); CGContextSetLineJoin(c, kCGLineJoinRound); CGContextSetTextDrawingMode(c, kCGTextStroke); self.textColor [UIColor whiteColor]; [super drawTextInRect:rect]; CGContextSetTextDrawingMode(c, kCGTextFill); self.textColor textColor; self.shadowOffset CGSizeMake(0, 0); [super drawTextInRect:rect]; self.shadowOffset shadowOffset;}//该片段来自于http://outofmemory.cn *37.在bundle中使用图片图片在编译后生成.tiff文件的问题默认情况下有两种resolutions的图片可以产生一些有趣的现象。例如当你导入一个retina 2x版本的图片时普通版的和Retina版的将会合并成一个多resolution的TIFF标签图像文件格式Tagged Image File Format。这不是一件好事。搜索hidpi将COMBINE_HIDPI_IMAGES设置为NO。 38.tintColor属性对UIButton不起作用的原因是创建button的类型要使用UIButtonTypeSystem 39.NavitatiionController改变返回按钮后手势失效的解决方法是添加 if ([self respondsToSelector:selector(interactivePopGestureRecognizer)]) { self.interactivePopGestureRecognizer.delegate weakSelf; } 40.使用位置时要显示的请求授权且在设置中更改授权状态后返回app程序不会崩溃使用相机、相册、麦克风时不用必须显示的请求授权在使用时系统会自动提示授权且在设置中更改授权状态后返回app程序会崩溃当然使用相机、相册、麦克风时也可以显示的请求用户授权不一定非要等到使用的时候由系统提示授权。 41.Cookie是放在请求头中的https://www.skyfox.org/ios-url-request-cookie.html http://blog.csdn.net/chun799/article/details/17206907 NSHTTPCookieStorage单件类提供了管理所有NSHTTPCookie对象的接口在OS X里,cookie是在所有程序中共享的而在iOS中,cookie只在当前应用中有效。 42.统计汉字和assic的一小段代码 - (NSUInteger)unicodeLengthOfString:(NSString *)text{ NSUInteger asciiLength 0; for (NSUInteger i 0; i text.length; i) { unichar uc [text characterAtIndex: i]; asciiLength isascii(uc) ? 1 : 2; } NSUInteger unicodeLength asciiLength / 2; if(asciiLength % 2) { unicodeLength; } return unicodeLength;} 43.fir.im 只支持两种打包方式AdHoc、InHouseAdHoc 就是内测版InHouse 就是企业版这里是识别上传的 .ipa 的信息来区分证书类型的如果想显示企业版需要用企业证书 InHouse 打包方式来导出 .ipa。 44.默认情况下有两种resolutions的图片可以产生一些有趣的现象。例如当你导入一个retina 2x版本的图片时普通版的和Retina版的将会合并成一个多resolution的TIFF标签图像文件格式Tagged Image File Format。这不是一件好事。搜索hidpi将COMBINE_HIDPI_IMAGES设置为NO。 45.设备接到apns发来的通知应用处理通知有以下几种情况1. 应用还没有加载这时如果点击通知的显示按钮会调用didFinishLaunchingWithOptions不会调用didReceiveRemoteNotification方法。如果点击通知的关闭按钮再点击应用只会调用didFinishLaunchingWithOptions方法。2. 应用在前台foreground)这时如果收到通知会触发didReceiveRemoteNotification方法。3.应用在后台1此时如果收到通知点击显示按钮会调用didReceiveRemoteNotification方法。2点击关闭再点击应用则上面两个方法都不会被调用这时只能在applicationWillEnterForeground或者applicationDidBecomeActive,根据发过来通知中的badge进行判断是否有通知然后发请求获取数据 46.在弹出UIAlertView的同时调用UINavigationController的pop方法则pop方法不能生效放到弹出UIAlertView之前可解决问题 47.删除工程中无用图片的脚本http://www.jianshu.com/p/17c000d97a74 48.iOS How can I skip compressing one PNG? 答案Xcode will only optimize PNG image files that it knows about. To prevent a specific PNG from being optimized, you change its file type so Xcode no longer knows its a PNG. Change the file type from Default - PNG Image to Data in Identity and Type inspector in XCode. 49.Compress PNG Files的作用 Compress PNG Files实际上是将图片像素的颜色信息转换成iPhone能够更快渲染的格式。PNG图片采用的颜色空间一般是RGBA。也就是说一个像素点的颜色是由四个分表代表红色绿色蓝色透明度的字节来存储。而iPhone的图像内存使用的是一种非标准的颜色空间BGRA,对应的图片格式叫做CgBI))。从读取图片像素点RGBA的信息到最终计算出屏幕渲染所需的BGR会有更大的耗时。如果图片一开始就是以BGR保存的那渲染时要做的就仅仅是个简单的内存拷贝操作。因此在项目进行编译也就是“Compress PNG Files时Xcode会对图片中的颜色信息进行计算转换。假设图片中某个像素是这样的一个颜色R:0.0, G:0.0, B:1.0, A:0.5),那么在编译时这个像素点会被转换成B:0.5, G:0.0, R:0.0, A:0.5.大家可以看到蓝色的部分已经被乘以50%的透明度。通过这样的预处理在程序运行时就不用再对颜色进行转换。但是A透明值仍然会保存在图片信息中这是因为我们的项目可能需要对同个位置的两张图片进行混合在这种情况下iPhone就需要通过透明值来计算最终呈现给用户的是怎样一个颜色。在iOS项目中将你的UIImageView属性的opaque 不透明设为YESiPhone便会知道图片中的alpha通道是无需使用到的直接将GRB的值渲染出来即可省去重计算颜色值的过程。 50.几个ARC下的内存注意事项 1.在UIView动画过程中动画的控件以及其子控件是不能响应事件的这应该是渲染树导致的UIView动画执行完成才会把控件设置为最终的位置UIView动画的block会使包含其中的成员变量的引用计数加一但是不会形成循坏引用并且在父视图销毁时应该移除了父视图本身及其子视图上的动画因此即使子视图在动画过程中只要父视图销毁了子视图就销毁了。2.GCD中block在没有runLoop时会及时释放当有runLoop时runLoop会间接持有block中的成员变量造成不能释放。3.performSelector:withObject:afterDelay:方法会持有调用该方法的对象和withObjct参数直到方法完成为止所以会造成对象不能立即释放。 51.原码、反码、补码的详细讲解http://www.cnblogs.com/zhangziqiu/archive/2011/03/30/ComputerCode.html 52.苹果开发账号的注册流程http://www.chinaz.com/manage/2016/0317/513437.shtml 53.解决Cound not find Developer Disk Image问题将想支持的iOS系统版本的文件拷贝到/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport目录下即可 54.比较版本号用NSNumericsearch用nsnumericsearch的话就是逐个取出数字进行比较。先比较第一个数字3和3相等的话继续比第二个1和2显然2比1大所以字符串2比字符串1大。 55.适配iOS10http://www.jianshu.com/p/9756992a35ca 56.iOS 将Log日志输出到文件中保存通过iTunes获取共享的log日志http://blog.csdn.net/u013250412/article/details/46924381 57.在安装XCode时命令行工具不会一起安装需要单独安装。安装方法1.可以从官网现在命令行工具直接安装 2.在终端中执行命令行中的命令会自动提示安装命令行工具。 58.iOS内购设置协议、税务和银行业务http://blog.csdn.net/lxmy2012/article/details/48444731 设置内购的注意事项1只有填写完整协议、税务和银行业务并审核通过后才能使用苹果的内购功能。 2在填写银行信息的时候CNAPS码的查询可以通过网站 http://www.tui78.com/bank/14772.html 59.详细的内购流程http://blog.csdn.net/jiisd/article/details/50527426 60.iOS推送流程http://www.jianshu.com/p/4b947569a548 http://superdanny.link/2016/02/02/iOS-Apple-Push-Notification-Service/ 61.iOS代码签名探析https://objccn.io/issue-17-2/ 62.URL Scheme详解http://sspai.com/31500 63.关于友盟渠道使用的那些事http://bbs.umeng.com/thread-6193-1-1.html 64.iOS 10『限制广告追踪』为移动广告带来哪些影响IDFA:http://www.admaster.com.cn/?cdownloadsaviewid71 65.iOS 中 self 和 super 的区别http://blog.csdn.net/wangjunling888/article/details/51712504 66.__IPHONE_OS_VERSION_MAX_ALLOWED用来判断是否当前版本SDK“开始”支持或具有某些功能 __IPHONE_OS_VERSION_MIN_REQUIRED用来判断是否当前版本SDK“仍然”支持或具有某些功能。 iOS不同版本适配问题__IPHONE_OS_VERSION_MAX_ALLOWED 和 __IPHONE_OS_VERSION_MIN_REQUIRED http://blog.csdn.net/xyxjn/article/details/40425895 67. Xcode 中的 Aggregate Target 的用处 Xcode defines a special type of target that lets you build a group of targets at once, even if those targets do not depend on each other. An aggregate target has no associated product and no build rules. Instead, an aggregate target depends on each of the targets you want to build together. For example, you may have a group of products that you want to build together. You would create an aggregate target and make it depend on each of the product targets. To build all the products, just build the aggregate target.An aggregate target may contain a custom Run Script build phase or a Copy Files build phase, but it cannot contain any other build phases. Any build settings that the aggregate target contains are not interpreted but are passed to the build phases that the target contains. 转载于:https://www.cnblogs.com/wfwenchao/p/4881486.html