移动开发技术

Jason's Blog

[转]到底什么时候才需要在ObjC的Block中使用weakSelf/strongSelf

| Comments

Objective C 的 Block 是一个很实用的语法,特别是与GCD结合使用,可以很方便地实现并发、异步任务。但是,如果使用不当,Block 也会引起一些循环引用问题(retain cycle)—— Block 会 retain ‘self’,而 ‘self‘ 又 retain 了 Block。因为在 ObjC 中,直接调用一个实例变量,会被编译器处理成 ‘self->theVar’,’self’ 是一个 strong 类型的变量,引用计数会加 1,于是,self retains queue, queue retains block,block retains self。

Mobike体验续

| Comments

这两天出差全靠mobike了,总共骑了大概有10趟吧,lite版的单车骑着确实轻松不少,价钱还更便宜。

昨天去了陆家嘴,逛了ifc,在黄浦江边吹了下风,是个好大上的地方。

Mobike体验

| Comments

今天到上海出差,第一次来,想到处随意逛逛,单车是个很不错的选择,所以注册了mobike。

今天骑了三段:

第一段2km,耗时19m。这一段主要是在上海交大校园里,人少路况好,体验非常不错。

第二段3km,耗时22m。这一段是从酒店去外滩,在半路上被交警拦下,有一段路不准骑车,于是改乘地铁。这一段由于是在马路上,没有专门的自行车道,骑行感受一般。不过最难忍受的是这个车骑久了不舒服,座位对我来说比较偏矮,发不上力,且久了容易酸,下地铁台阶的时候感觉都快跪下去了。

第三段7km,耗时49m。从南京路步行街到酒店。跟第二段类似,没有专用自行车道,不停在人行道和马路边缘穿行,影响骑行速度。这次我骑得比较慢,也可能更适应了,腿酸的感受稍微弱一点。

总体感受: 1. 方便,随停真的是太方便了,完全不操心。 2. 用的人挺多的,上海和深圳都是这样。 3. lite版单车还比较少,一般附近难以找到,看起来可能会好骑一点,因为更轻,还没有体验过。 4. app做得不错,功能简洁易用,单车定位比较准。 5. 在北京这种有专用自行车道的城市,发展会更好,而对于没有骑行环境的城市,例如重庆,基本就搞不起来了。

经过今天的体验,总体来讲感觉不错,从最以前的完全不看好,到现在觉得稍微觉得有戏。以后有需要会继续用。

利用traceview优化Android应用流畅度

| Comments

众所周知,屏幕刷新频率必须要达到60Hz,人眼才能感觉不到界面的卡顿。60Hz意味着界面每一帧的计算加渲染时间不能超过16ms,当某些业务逻辑比较耗时的时候,执行时间可能超过16ms的阈值,这时候给用户直观的感受就是界面卡顿。

traceview是安卓sdk提供的一个性能分析工具,能够收集函数的执行时间,以精确的分析系统的瓶颈所在。当我们遇到系统卡顿问题的时候,可以利用这个工具来进行分析。下边的篇幅就项目中一个真实的卡顿问题,来介绍traceview工具的使用。

DOM XSS

| Comments

因为JavaScript脚本功能强大,我们可以利用它来更改整个页面内容,所以我们就可以制造出利用真的目标域名的假页面

CardView在API 21以下的圆角效果处理

| Comments

CardView是Android5.0(API 21)加入的新控件,当然,在API 21以下也能用,在build.gradle的依赖里加入下边一行就可以用了

compile 'com.android.support:cardview-v7:23.1.1'

项目中要做一个卡片浏览的程序,卡片需要有5dp的圆角,圆角效果CardView自带属性就可以支持,加上app:cardCornerRadius属性就好了,如下:

1
2
3
4
5
6
7
8
9
<android.support.v7.widget.CardView
  xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:app="http://schemas.android.com/apk/res-auto"
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  app:cardUseCompatPadding="true"
  app:cardCornerRadius="5dp">
  ...
</android.support.v7.widget.CardView>

用c++编写PHP扩展

| Comments

背景

有时候老业务用的是C++接口,但是为了快速开发,Web类业务已经转移到PHP上,所以如何用PHP封装老业务的C++接口进行调用,就是这篇文章所要解决的问题。