JavaScript ==与===区别(两个等号与三个等号)

对于 string, number 等基础类型,== 和 === 是有区别的

  • 不同类型间比较,== 之比较“转化成同一类型后的值”看“值”是否相等,===如果类型不同,其结果就是不等
  • 同类型比较,直接进行“值”比较,两者结果一样

对于 Array, Object 等高级类型,== 和 === 是没有区别的

  • 进行“指针地址”比较

基础类型与高级类型,== 和 === 是有区别的

  • 对于==,将高级转化为基础类型,进行“值”比较
  • 因为类型不同,===结果为false

20160912 update

对于 null 与 undefined, == 和 === 是有区别的

  • 如使用 == 的话,undefined 会被转换成 null,所以很多判断是否为 null 可以使用 ==.

各类工具合集-持续更新

Web平台工具

  1. Crowdin https://crowdin.com/
    翻译平台,建立项目或者找开放的项目进行翻译,可按句对比进行翻译,并且提供各单词直译的结果。

  2. Heroku https://www.heroku.com/
    Heroku作为最开始的云平台之一,从2007年6月起开发,当时它仅支持Ruby,但后来增加了对Java、Node.js、Scala、Clojure、Python以及(未记录在正式文件上)PHP和Perl的支持。基础操作系统是Debian,在最新的堆栈则是基于Debian的Ubuntu。

  3. 51tools各类Web转换工具集合站 http://51tools.info/
    您身边的在线工具: URLEncode、URLDecode、Html工具、JS工具、CSS工具、JSON工具、Unicode编码转换等

  4. Trello https://trello.com
    免费好用的任务协作工具。运营和管理一家公司的最大的难点就是跟踪人们的工作内容。Trello 就是为了解决这个问题而开发的。

Apple平台工具

  1. OmniFocus https://www.omnigroup.com/omnifocus/
    GTD王者,适合各种人群,科学管理自己的时间,高效面对人生。详细的大家自行用Google百度一下,教程介绍多的是。这家伙使用简单,但有些地方需要些技巧,比如同步可以试试 坚果云 的 WebDAV,另外这个小而美的公司只做Apple平台。

  2. OmniPlan https://www.omnigroup.com/omniplan
    Mac 下的 Project 甘特图~

  3. OmniGraffle https://www.omnigroup.com/omnigraffle
    Mac 下的 Visio

近期随想

一年又一年, 不知不觉中自己老了… 每一步的选择真的都意味着放弃,自己也都真切的能感受得到. 关键在于,不断的会有各种选择与放弃.一个人的时间 精力真的很有限,越是岁数大越是能清楚的明白这个事实.

今年有好些事儿要做,当然去年也没闲着(只是blog一直没有更新,由于微信公众号流行,感觉blog也要过时了. 但又实在没时间搞开源甚至自己写点东西,想想也是醉了…). 去年我结婚了,搞定了几年大事…想说: 今年继续

  • 研究 ReactNative 并有所应用
  • 扩展除技术外的”技能”
  • 带baby出去继续玩
  • 看场演唱会, 暂定杰伦的
  • 其它…

没了…

App Transport Security Support Aka Apps on iOS 9 Don’t Work

虽然不想说,但还是很久没更新了。
最近被El caption折腾了,虽然是有史以来最好用的beta版,但第二个beta被害了。

几个重要的点
1. Cornerstone 罢工(2.7.10)
2. iStat Menus 5(正版最新)罢工
3. beta2上Xcode 6.3.2 直接也不让用了 – -!

这些。。有些不能接受

不过我是这样解决的
1. svn 直接命令行
2. iStat Menus 放弃,反馈给官方等更新(把系统设置又改了一圈)
3. Xcode直接使用beta版凑合用(要上线就找同事咯~)

不过问题总是会找上门来:

iOS9的模拟器一直上不了网,但模拟器里的Safari是可以联网的
我勒个去啊

查了好久却一直没啥进展,可能是对网络安全了解较少,最好发现是协议升级,需要在app上进行一些配置才可以。原文如下:

iOS 9 (may) force developers to use App Transport Security exclusively. I overheard this somewhere randomly so I don’t know whether this is true myself. But I suspect it and have come to this conclusion:

The app running on iOS 9 will (maybe) no longer connect to a Meteor server without SSL.

This means running meteor run ios or meteor run ios-device will (probably?) no longer work.

In the app’s info.plist, NSAppTransportSecurity [Dictionary] needs to have a key NSAllowsArbitraryLoads [Boolean] to be set to YES or Meteor needs to use https for its localhost server soon. (From Page 26 http://devstreaming.apple.com/videos/wwdc/2015/711y6zlz0ll/711/711_networking_with_nsurlsession.pdf?dl=1)

This is what an error may look like. Of course this is at best, a guess:

The resource could not be loaded because the App Transport Security policy requires the use of a secure connection. The best possible fix is to get Meteor to use a SSL server in dev mode.

Oh the hassle! Also again, I overheard this from a loud third party.

引用:https://github.com/meteor/meteor/issues/4560

附:真机调试也还有问题,是部分库造成的,这个还需要研究下。

iOS 序列化与反序列化

很久以前的文章,发现还比较有用,从新浪博客转过来。

序列化的问题,在以前做VC的时候就听说过,但实际用的不多。大概意思呢,就是把一个对象(一些数据或者定义的对象)序列化成文件(一般是XML文件),永久的保存起来。需要用的时候再通过反序列化恢复原有的数据。

在iOS(OC)中,像标准的集合以及字典(NSArray, NSDictionary),都有直接序列化的方法,wirteToFile…,但这些只适合用于集合中只有标准数据类型,如果有自定义的类,那么就会报错,写入失败了。

标准反序列化

1
2
3
4
5
6
7
   // NSMutableArray *_arDataSource;
   NSString *strCaches = [NSString stringWithFormat:@"%@/tmp/%@",
                        NSHomeDirectory(), kCachedFileName];
   BOOL bWriteSuccess = [_arDataSource writeToFile:strCaches atomically:YES];
   if (bWriteSuccess == NO) {
//            NSLog(@"Wirte file error, unkown error occurred");
   } // end of if (bWriteSuccess == NO) {

标准反序列化

1
   _arDataSource = [[NSMutableArray arrayWithContentsOfFile:strCaches] retain];

iOS调试方法定位Crash以及静态库调试

引子

在iOS开发中常会遇到Crash,有时Xcode并不能很好的提示我们出错的原因是什么,具体是哪行代码出了问题。
比如 UNRECOGNIZED SELECTOR SENT TO INSTANCE 问题快速定位的方法 文中提到的定位处理不了的消息发送。

Symbolic Breakpoint

在调试时,我们经常需要使用到断点,Xcode支持几种断点:

  • 普通断点
  • Exception Breakpoint
  • Symbolic Breakpoint
  • 。。。

我们可能比较熟悉普通断点,主要来介绍一下 Exception BreakpointSymbolic Breakpoint.

Exception Breakpoint
全局异常断点,傻瓜式的使用,在任意的代码处有异常抛出没有捕获即可“被断住”。
注:如果使用了C、C++开发的话,有些signal可能会被这种断点触发,但并不会引发Crash

Symbolic Breakpoint
通过类名以及方法名来添加断点的一种方式。例如:

1
-[NSObject(NSObject) doesNotRecognizeSelector:]

包含静态库的整体调试

如果想测试在某个静态库中某个方法是否执行,可以在知道类名跟方法名的情况下使用 Symbolic Breakpoint 来确认这个情况

送个命令~

可以在某个静态库或可执行文件中查找 symbol。 需要详细的使用方法,请自行man nm

1
2
// nm - display name list (symbol table)
nm xxx.a | grep xxSymbol

iOS 获取当前正在显示的ViewController

引子

在做 iOS 开发时,我们经常在一个 ViewController 中 presentModelViewController 另外一个 ViewController。看似简单,但在与 UIActionSheet 和 UIAlertView 结合起来使用时,很容易出现问题。问题如下: http://stackoverflow.com/questions/21158939/warning-attempt-to-present-uimodalitemspresentingviewcontroller-on-uimodalitema

1
2
3
"Warning: Attempt to present `<_UIModalItemsPresentingViewController:>  on 
<_UIModalItemAppViewController:> which is already presenting 
<_UIModalItemsPresentingViewController:>"`

类似的问题是因为 UIAlertView 或 UIActionSheet 在系统级使用了 presentModelViewController,并且修改了 Application 中更换了 keyWindow,在 keyWindow 的 rootViewController 中 presentModelViewController,如果当前 present 还未完成时,再 present 别的界面,就会报这个错。

解决方案

在 present 时,不直接使用 keyWindow,使用如下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
//获取当前屏幕显示的viewcontroller
- (UIViewController *)getCurrentVC
{
    UIViewController *result = nil;
    
    UIWindow * window = [[UIApplication sharedApplication] keyWindow];
    if (window.windowLevel != UIWindowLevelNormal)
    {
        NSArray *windows = [[UIApplication sharedApplication] windows];
        for(UIWindow * tmpWin in windows)
        {
            if (tmpWin.windowLevel == UIWindowLevelNormal)
            {
                window = tmpWin;
                break;
            }
        }
    }
    
    UIView *frontView = [[window subviews] objectAtIndex:0];
    id nextResponder = [frontView nextResponder];
    
    if ([nextResponder isKindOfClass:[UIViewController class]])
        result = nextResponder;
    else
        result = window.rootViewController;
    
    return result;
}

查看更多:http://blog.csdn.net/worldzhy/article/details/42120929

近期随想

好久没更新了,好些东西要写。但又不知道写哪个~ 主要问题在于:好些东西不想再直接写个结论上去,不想直接拿别人的结果。 这方面也总结过了,今天写点别的吧。


推荐个工具 Omni Focus。GTD王者,适合各种人群,科学管理自己的时间,高效面对人生。
详细的大家自动用Google百度一下,教程介绍多的是。这家伙使用简单,但有些地方需要些技巧,比如同步可以试试 坚果云 的 WebDAV,另外Android平台没有手机app。


后续在技术上的分享可能会少一些,可能会从自己的感悟上面多写写,希望大家多多支持。



有时在想,技术、人、沟通、公司、项目、产品、用户、上线、事故。。。等等这些事,到底是如何影响着我们。想这些写一些,又不知道从哪写起。语言不及格啊~~~


先放些关键字,再有体会时一个一个写吧,加油!