Post Jobs

20条常见的编码陷阱,ios程序通知机制

  不管你现在的编程技能有多么的高超,曾经你也是个亦步亦趋,不断的学习的初学者。在编程这条曲折的道路上,我想你肯定犯过一些低级的错误、遇见过一些普通的编码陷阱。本文作者跨越多个语言,为大家总结了20条常规陷阱,并提供了解决方案。

Git个大平台(win/Linux/Mac)图形化界面客户端大汇总,gitmac

摘要:
介绍各平台下的图形化界面git客户端(本人并没有全部使用过),欢迎大家补充新的软件或者使用感受~ 

ios程序中的通知机制,ios程序通知机制

每一个应用程序中都有一个NSNotificationCenter实例,用来协助不同的对象之间的通信,任何一个对象都可以向通知中心发布通知(NSNotication),在通知中描述自己做什么。其他的感兴趣的对象可以申请在某个特定的通知或者特定对象发出通知时接收到这个通知。

  一个通知一般包含有3个属性:

  //通知的名称

  - (NSString *)name;

  //通知的发布者

  - (id)object;

  //通知附加的额外信息

  - (NSDictionary *)userinfo;

  

  初始化一个通知对象有以下的方法

  + (instancetype)notificationWithName:(NSString *)aName
object:(id)anObject;

  + (instancetype)notificationWithName:(NSString *)aName
object:(id)anObject userInfo:(NSDictionary *)aUserInfo;

  - (instancetype)initWithName:(NSString *)name object:(id)object
userInfo:(NSDictionary *)userInfo;

 

 

  
  通知中心(NSNotificationCenter)提供了相应的方法注册监听器(Observer)来监听通知的发布

  – (void)addObserver:(id)observer selector:(SEL)aSelector
name:(NSString *)aName object:(id)anObject;

  参数解析: observer:监听器,即谁要接收这个通知

       aSelector:收到通知后,回调监听器的这个方法,并且把通知对象当做参数传入

       aName:通知的名称。如果为nil,那么无论通知的名称是什么,监听器都能收到这个通知

       anObject:通知发布者。如果为anObject和aName都为nil,监听器都收到所有的通知

 

  – (id)addObserverForName:(NSString *)name object:(id)obj
queue:(NSOperationQueue *)queue usingBlock:(void (^)(NSNotification
*note))block;

  参数解析: name:通知的名称

       obj:通知发布者

       block:收到对应的通知时,会回调这个block

       queue:决定了block在哪个操作队列中执行,如果传nil,默认在当前操作队列中同步执行

  通知中心不会保留监听器对象,在通知中心注册过的对象,必须在该对象释放前取消注册。否则,当相应的通知再次出现时,通知中心仍然会向该监听器发送消息。因为相应的监听器对象已经被释放了,所以可能会导致应用崩溃
通知中心提供了相应的方法来取消注册监听器

  – (void)removeObserver:(id)observer;

  - (void)removeObserver:(id)observer name:(NSString *)aName
object:(id)anObject;

  一般在监听器销毁之前取消注册,一般用以下方法:

  – (void)dealloc {

    [super dealloc];

    [[NSNotificationCenter defaultCenter]
removeObserver:self];

   }

  UIDevice类提供了一个单例对象,它代表着设备,通过它可以获得一些设备相关的信息,比如电池电量(batteryLevel)、电池状态(batteryState)、设备的类型(model,比如iPod、iPhone等)、设备的系统(systemVersion)
通过[UIDevice currentDevice]可以获取这个单粒对象
UIDevice对象会不间断地发布一些通知,下列是UIDevice对象所发布通知的名称常量:
  UIDeviceOrientationDidChangeNotification // 设备旋转

  UIDeviceBatteryStateDidChangeNotification // 电池状态

  UIDeviceBatteryLevelDidChangeNotification // 电池电量

  UIDeviceProximityStateDidChangeNotification // 近距离传感器

每一个应用程序中都有一个NSNotificationCenter实例,用来协助不同的对象之间的通信,任何一个对象都…

 

一、TortoiseGit – The coolest Interface to Git Version Control

TortoiseGit 是 TortoiseSVN 的 Git 版本,TortoiseGit 用于迁移 TortoiseSVN
到 TortoiseGit,一直以来 Git 在 Windows 平台没有好用 GUI 客户端,现在
TortoiseGit 的出现给 Windows 开发者带来福音,目前 TortoiseGit 是 1.8.6.0
版本,一个开源的项目,欢迎你的加入贡献代码。(摘自oschina)

另外,个人感觉 TortoiseGit 用起来很方便,跟 TortoiseSVN
一样可以通过直接观察文件图标来查看文件当前的状态,在 Windows
下的表现确实没得说,所以放在第一位推荐。

支持系统:Windows  (免费软件)

图片 1

 JavaScript篇

二、SourceTree – A free Git & Mercurial client for Windows or Mac

SourceTree 是 Windows 和 OS X 下免费的 Git 和 Hg
客户端。支持创建、克隆、提交、push、pull 和合并等操作。(摘自oschina)

SourceTree 界面非常美观,可以方便管理多个 Git 项目,同时还支持
Hg,就是启动速度稍微有些慢,但是总体来说还是很不错的。

支持系统:Windows / OS X (免费软件)

图片 2

  1.不必要的DOM操作

  例如下面这段代码:

1 2 3 4 5 // anti-pattern for (var i = 0; i < 100; i++){     var li = $("<li>").html("This is list item #" + (i+1));     $("#someUL").append(li); }

  这段代码对DOM进行了100次修改,并且创建了100个不必要的jQuery对象。正确的做法是使用一个文档片段,或者创建一个字符串,把100个<li>元素赋给该字符串。然后附加到HTML中。这样就只需运行DOM一次,代码如下:

1 2 3 4 5 var liststring = ""; for (var i = 100; i > 0; i--){     liststring += "<li>This is list item #" + (99- i); } document.getElementById("someUL").innerHTML(liststring);

  正如上面所描述的一样,下面再提供一个方式,使用数组:

1 2 3 4 5 6 7 var liststring = "<li>" var lis = []; for (var i = 100; i > 0; i--){     lis.push("This is list item #" + (99- i)); } liststring += lis.join("</li><li>") + "</li>"; document.getElementById("someUL").innerHTML(liststring);

  这是在JavaScript创建重复HTML最快最简单的方法,无需使用模板库或框架。

三、GitUp – Work quickly, safely, and without headaches

GitUp 是 Mac OS X 的全功能开源 Git
客户端,提供快速,安全的操作,直接在硬盘上与 Git
数据库交互,操作库的图而不是操作 commits。(摘自oschina)

这个是最新出来的,看介绍貌似挺厉害的,可以无限地撤销和重做,而且快的离谱。不过没有亲身试验,不知道实际效果如何,希望用苹果的朋友试过以后能来点反馈。

支持系统:OS X(免费软件)

图片 3

  2.不一致的变量名和函数名

  这个问题是非常重要的,尤其当你在别人的代码上工作时,一定要保持标识符(变量名和函数名)一致,例如下面这段代码:

1 2 3 var foo = "bar"; var plant = "green"; var car = "red";

  通常,人们并不会设置变量名叫Something,这涉及到命名规则问题,命名应清晰明了,一目了然。很多编程语言地变量命名都使用大写。

  下面是对函数的命名:

1 2 3 function subtractFive(number){     return number - 5; }

  语法结构清晰并且能起到解释性功能。

  例如想要对给定的数字加5,仍采用上述命名模式,比如:

1 2 3 function addFive(number){     return number + 5; }

  有时,你会根据返回值命名,例如该函数要返回一个HTML字符串,那么可以命名为getTweetHTML(),如果函数只是做一些操作,无需返回值,那么可以在前面加一个do前缀。例如doFetchTweets()。

  构造函数通常会遵循类原则,大写第一个字母:

1 2 3 function Dog(color){     this.color = color; }

  命名应带有描述性,比如操作型的函数在前面加do,另外要具备可读性和提示性。

四、SmartGit – Get your commit done

SmartGit 是一个 Git 版本控制系统的图形化客户端程序。(摘自oschina)

支持系统:Windows / OS X  / Linux  (共享软件)

图片 4

  3.在for…Loops中使用hasOwnProperty()方法

  JavaScript数组是没有关联的,可以把它当做哈希表,使用循环来遍历对象属性:

1 2 3 for (var prop in someObject) {     alert(someObject[prop]); // alert's value of property }

  然而,存在的问题是for…in
loop是在对象属性链上遍历每个枚举类型的属性,如果你只想使用对象实际拥有的属性,这可能有问题的。那怎么解决呢?你可以使用hasOwnProperty()方法。代码如下:

1 2 3 4 5 for (var prop in someObject) {     if (someObject.hasOwnProperty(prop)) {         alert(someObject[prop]); // alert's value of property     } }

五、QGit – QGit is a git GUI viewer built on Qt/C++

QGit 是一个基于 Qt/C++ 开发的 GIT
的图形化浏览器。可以用来浏览修订版记录、补丁内容以及更改的文件。

支持系统:Windows / Linux  (免费软件)

图片 5

  4.比较布尔值

  把布尔值作为条件进行比较,其实这是在浪费电脑的计算时间。看下面这个例子吧:

1 2 3 4 5 if (foo == true) {     // do something for true } else {     // do something for false }

  其实foo==true这个比较完全是多余的,因为foo已经是布尔类型。直接这样写就行:

1 2 3 4 5 if (foo) {     // do something for true } else {     // do something for false }

  又或者这样写:

1 2 3 4 5 if (!foo) {     // do something if foo is false } else {     // do something if foo is true }

六、GitX – GitX is a git GUI made for Mac OS X

GitX 是一个是一个 MacOS X 系统上的 Git 版本控制系统的图形化客户端程序。

支持系统:OS X  (免费软件)

图片 6

  5.事件绑定

  在JavaScript中,事件是个复杂的问题。事件冒泡(event
bubbling)和委托正在取代内联事件(inline
onclick)操作(一些特殊的“初始页”除外)。

  假设你有一个图片网格,需要启动一个modal
lightbox窗口。千万不要采取下面的做法,示例采用的是jQuery,如果你使用相似的库或者其他,冒泡机制也同样适合传统的JavaScript。

  相关的HTML代码:

1 2 3 4 5 6 <div id="grid-container">     <a href="someimage.jpg"><img src="someimage-thumb.jpg"></a>     <a href="someimage.jpg"><img src="someimage-thumb.jpg"></a>     <a href="someimage.jpg"><img src="someimage-thumb.jpg"></a>     ... </div>

  不好的JavaScript写法:

1 2 3 $('a').on('click', function() {     callLightbox(this); });

  这段代码假设调用lightbox,里面传递一个anchor元素并且引用全屏图片。与其绑定每个anchor元素还不如直接使用#grid-container元素。

1 2 3 $("#grid-container").on("click", "a", function(event) {     callLightbox(event.target); });

  在这段代码中,this和event.target都表示anchor元素。同样你也可以在任何父元素上使用。只要保证所定义的元素是事件目标就行(event’s
target)。

七、gitnub – Git kicking it OS X style

gitnub 也是一个是一个 MacOS X
系统上的 Git 版本控制系统的图形化客户端程序。

支持系统:OS X  (免费软件)

图片 7

  6.避免三元冗余

  在JavaScript和PHP中,过度使用三元语句是很常见的事情:

1 2 // javascript return foo.toString() !== "" ? true : false;
1 2 // php return (something()) ? true : false;

  条件判断的返回值永远只有false和true,言外之意就是你无需把true和false显示添加到三元运算中。相反,你只需简单的返回条件:

1 2 // javascript return foo.toString() !== "";
1 2 // php return something();

八、Tower – The most power Git client for Mac

Tower 号称是 Mac 下最好用的 Git 客户端。

支持系统:OS X  (共享软件)

图片 8

发表评论

电子邮件地址不会被公开。 必填项已用*标注

相关文章

网站地图xml地图