- 博客(35)
- 收藏
- 关注
原创 ViewHolder的简便写法
在android项目中,我们经常会用到ViewHolder。通常我们会在Adapter里面自定义一个ViewHolder类,并加入我们期望复用的View,具体做法就不赘述了。 通常在处理ViewHolder时,我们遇到的最大挑战就是代码冗余,每一个Adapter里面我们都需要有这么一个ViewHolder。今天在网上看到有人发明了一种更省事的写法,具体见下面代码:@SuppressWarn
2016-04-19 15:14:57
770
原创 解决iOS8下ALAssetsLibrary创建相册的bug
说到ALAssetsLibrary,相信搞iOS开发的大都知道它,在iOS上做过相册相关功能的应该对这个都比较熟悉了,用它来操作访问相册是很方便的。但是,,,,自从iOS8发布后,ALAssetsLibrary在Stack Overflow上被各种讨论了。因为在iOS8上用这个库创建相册会有个bug:创建相册,手动删除它,再用这个库去创建刚被删除的相册,这个时候方法回调是不会跑fail模块的,它走
2015-04-03 18:40:51
5216
转载 Mac OS X上使用Wireshark抓包
Wireshark针对UNIX Like系统的GUI发行版界面采用的是X Window(1987年更改X版本到X11)。Mac OS X在Mountain Lion之后放弃X11,取而代之的是开源的XQuartz(X11.app)。因此,在Mac OS X上安装Wireshark之前,需要先下载安装XQuartz。1.安装XQuartzXQuartz(XQuartz-2
2015-02-28 18:05:07
1038
转载 Core Data数据迁移与升级
如果IOS App 使用到CoreData,并且在上一个版本上有数据库更新(新增表、字段等操作),那在覆盖安装程序时就要进行CoreData数据库的迁移,具体操作如下:1.选中你的mydata.xcdatamodeld文件,选择菜单editor->Add Model Version 比如取名:mydata2.xcdatamodel2.设置当前版本
2014-12-05 17:27:27
1071
转载 利用.dSYM和.app文件准确定位Crash位置
首先,确保在release(Ad Hoc或者App Store)一个版本时,保存了对应的xxx.app和xxx.dSYM文件。其次,验证xxx.crash、xxx.app和xxx.dSYM三者的uuid是否一致。验证方法:1)查看xxx.app的uuid。[plain] view plaincopyprint?
2014-11-27 10:46:38
1058
转载 解决 UIBarButtonItem 移位问题
在iOS7 出来混之前,我们的项目里 NavigationBar 很多地方用到个性化的button, 经常会用以下的代码生成一个NavigationBar 中的按钮。UIButton *button = [UIButton alloc] initWithFrame:...];[button setImage: ... forState: ...];UIBarButtonIt
2014-07-25 16:34:16
2426
原创 iOS 通讯录访问(一)
Apple把通讯录存放在SQLite 3中,但是应用之间不能直接访问,也就是说我们自己编写的应用不能采用数据持久化技术直接访问通讯录数据库。为了实现通讯录数据库的访问,Apple开放了一些专门的API。出于安全考虑,iOS 6之后的应用访问通讯录,需要获取用户授权。与其他应用不同的是,通讯录对一个应用只授权一次,即便是这个应用删除后重装,也不必再次授权。Apple为开发者提供了两个框架
2014-02-27 20:31:40
2509
原创 Core Data
使用Core Data我们可以很方便实现数据存储而不用关心存储细节。在Xcode的工程模板中,有3个模板(Master-Detail Application、Utility Application和Empty Application模板)可以直接为工程添加Core Data支持。其他的模板则需要我们自己手动添加Core Data支持。我们先看一下Xcode自动生成的Core
2014-02-17 20:26:11
1640
原创 Android软键盘与back事件
今天同事在项目中遇到一个问题,按back键隐藏软键盘时,输入框还有焦点(按照需求,软键盘隐藏的同时,输入框要失去焦点)。同事跟我说的时候,他在Activity的onKeyDown方法里面做处理,说是这个时候该方法不会触发。依据Android事件分发的原理,软键盘显示的时候,back事件会直接被软键盘消化掉,所以这个时候onKeyDown不会触发。我的第一反应是,
2014-02-17 17:13:46
4130
原创 iOS数据持久化
iOS有一套完整的数据安全体系,iOS应用程序只能访问自己的目录,这个目录成为沙箱目录,应用程序之间禁止数据的共享和访问。访问一些特殊的应用,如:联系人应用,必须通过特定的API访问。一、沙箱目录沙箱目录是一种数据安全策略,很多系统都采用沙箱设计(如,Android系统)。沙箱目录设计原理是只能允许自己的应用访问目录,而不允许其他的应用访问。应用沙箱目录下有Do
2014-01-22 19:43:40
1495
原创 SearchBar的cancel按钮的焦点问题
今天在iOS项目中添加一个新的feature,其中用到了iOS提供的SearchBar。该控件用于搜索场景,非常好用,Apple把许多工作都已经封装好了,以至于用起来有点傻瓜式的感觉。在我的案例场景中,需要用到SearchBar自带的cancel按钮。当输入搜索条件点击键盘上的搜索按钮即开始search(出于XXX原因,我们抛弃了实时搜索功能),这个时候需要隐藏键盘,当searchBa
2014-01-14 21:06:22
2527
转载 Python 2.x 与 Python3.x 主要区别对照表
Python2.4+ 与 Python3.0+ 主要变化或新增内容Python2 Python3print是内置命令 print变为函数print >> f,x,y print(x,y,file=f)print x, print(x,end='')reload(M)
2014-01-05 13:54:37
1108
原创 iOS导航模式
在我们开发一款app时,我们都会在设计阶段把应用的导航确定下来。导航指导用户使用我们的应用,如果没有导航,我们的应用就会显得很混乱。在iOS应用中,视图控制器处于重要地位。在UIKit中,视图控制器有很多种,有些负责显示视图,有些也同时兼顾导航。我们常见的视图控制器有以下几种:1、UIViewController。用于自定义视图控制器的导航。2、UINavigationCont
2013-12-19 20:03:28
4026
原创 IOS 6下拉刷新
苹果在IOS 6 API中加入了下拉刷新控件;并且IOS 6之后,UITableViewController中增加了一个refreshControl属性,这个属性保持了UIRefreshControl的一个对象指针。UIRefreshControl是IOS 6为表视图实现下拉刷新而提供的类,目前该类只应用于表视图界面。UIRefreshControl的refreshControl属性与UITabl
2013-12-18 19:58:08
1288
原创 表视图
在IOS中,一般情况下,我们都会以表的形式来展示数据。在表视图中,分节、分组和索引功能使我们展示的数据看起来更规整。一、概述1、表视图组成在IOS中,表视图是最重要的视图。与表视图相关的一些概念如下:(1)表头视图。表视图最上边的视图,用于展示表视图的信息,如表视图刷新信息等。(2)表脚视图。表视图最下边的视图,用于展示表视图的信息,如表视图分页时显示“更多”等信息。
2013-12-15 14:55:32
2796
原创 IOS 6 集合视图
IOS 6中开放了集合视图API——UICollectionView,方便了网格视图的开发。集合视图有4个重要组成部分:1、单元格,它是集合视图中的一个单元格。2、节,它是集合视图中的一个行数据,由多个单元格组成。3、补充视图,它是节的头和脚。4、装饰视图,集合视图中的背景视图。UICollectionView继承自UIScrollView。与选择器类似,集合视图也有两
2013-12-10 19:55:13
2591
原创 真的获取到了屏幕尺寸的实际像素值吗
在Android应用开发过程中,我们常常需要获取到屏幕尺寸的像素值。到此,很多人会说:So,easy!好吧,之前我也是这么认为滴。因为DisplayMetric类文档开头就有这么一段:刚刚无意中看了下getMetrics的文档描述:额,,,我也不晓得自己之前是怎么混过来的。针对这个问题google了一下,有几篇博客里提到了这个问题。大概看
2013-12-10 16:54:08
2492
原创 PickerView
IOS提供了日期选择器UIDatePicker,它可以实现对日期的选择。日期选择器有4种模式:日期、日期和时间、时间和倒计时定时器。日期选择器使用比较简单,这里我们不去实现它了。有的时候我们可能需要输入除了日期之外的其他内容,比如籍贯等。IOS为我们提供了UIPickerView,它是UIDatePicker的父类。UIPickerView是非常灵活的,它的滚轮可以设定,每一个滚轮的内
2013-12-06 21:00:49
1874
原创 屏幕旋转
在iphone官方提供的应用中,有一个计算器应用,竖屏时它是一个简单的计算器;横屏时,它是一个复杂的科学计算器。从这个计算器应用可以看出,横屏和竖屏时分别采用了不同的视图,而不是同一个视图界面元素的重新布局。这里我们的sample中,竖屏时屏幕中有3个按钮,横屏时屏幕中有4个按钮。这里我们把创建工程时生成的视图作为竖屏,那么我们需要额外创建一个横屏视图。我们有3种方式来实现
2013-12-05 21:16:55
1397
原创 ScrollView与Keyboard协同
ScrollView对应于UIKit中UIScrollView类,是容器视图。它有两个子类——UITextView和UITableView,它们在内容超出屏幕时提供水平或垂直方向的滚动条。ScrollView的属性有很多,比较重要的与显示有关的有:contentSize、contentInset和contentOffset。1、contentSizecontentSize属性表
2013-12-03 21:04:16
2396
原创 Objective-C 异步任务
Objective-C提供了多种不同的异步处理方式,这里主要看3种比较常用的方式:NSThread、Grand Central Dispatch与NSOperationQueue。一、NSThreadNSThread是OC提供的线程类,基于此,我们可以很方便地开辟线程。在OS X V10.5之前,该类只提供了一种开启新线程的方法(如:[NSThread detachNewThrea
2013-11-27 20:39:09
7174
原创 IOS 6 UI状态保存与恢复
在IOS6中,apple提供了一些API使得UI状态保持和恢复变得很容易。我们可以在以下三个地方实现状态保持和恢复:1、应用程序委托对象;2、视图控制器;3、自定义视图;为了测试这个功能,我们定义一个简单的界面(一个UILabel和一个UITextField),测试保持和恢复textfield中的内容。首先在Interface Builder的Scene中选中V
2013-11-07 19:52:38
2597
原创 数据库性能优化
最近项目曝出了性能问题,这两天一直忙与此。先是大量测试找出具体现象的出现规律,然后据此分析问题大概出在哪里,最后寻求解决办法。 背景简介: 1、产品是DVB相关的,问题是出在android平台(基本是在android2.3、硬件配置相对来说比较低的一些手机上)的DVB player上; 2、空中DVB的EPG数据会定时(间隔时间很短,10s以内)发送一次,而且
2013-10-16 17:32:34
847
原创 递归
递归是一种强大的方法,它允许一个对象以其自身更小的形式来定义自己。在计算机科学中,递归是通过递归函数来实现的。递归函数是一种可以调用自身的函数。递归可以分为基本递归和尾递归。 基本递归:一种强大的方法,允许一个问题以其自身越来越小的形式来定义自己。 尾递归:如果一个函数中所有递归形式的调用都出现在函数的末尾,我们称这个递归函数是尾递归的。当递归调用是整个函数
2013-10-03 16:22:19
1252
原创 Intent传递extra data,小心坑!
今天在测试之前写好的一个功能模块时发现了一个关于Intent的使用、算是比较隐蔽的坑,后面经过一番折腾后找到问题所在。上下文环境: 我们的项目是DTV player,里面有个播放模块。播放分live tv和remote file,这里就拿live tv说事。play live可以分为主动选择channel播放和软件自动恢复播放。主动选择channel播放,是指用户在chann
2013-09-29 21:40:31
2316
原创 应用和视图的生命周期
在IOS中,AppDelegate是应用程序的委托对象,它继承了UIResponder类,并实现了UIApplicationDelegate协议。UIResponder类可以使子类AppDelegate能够成为应用程序委托对象,这种对象能够响应应用程序的生命周期。 IOS应用的不同状态以及它们彼此之间的关系,如下图所示。Not Running,应用没有运行或被系统终止
2013-09-18 23:37:20
1887
原创 autoconf与automake
一、autoconf autoconf是一个用于生成可以自动的配置软件源代码包以适应多种UNIX系统的shell脚本的工具。由autoconf生成的配置脚本在运行时与autoconf是无关的,也就是说,配置脚本的用户并不需要拥有autoconf。由autoconf生成的这些脚本通常被命名为configure,它们检查当前系统是否满足软件正常运行所需要的特征,并根据检查得到的信息生成Ma
2013-09-06 22:00:04
2343
原创 linux软件包管理
通常我们用的Linux版本可以分为两大类,一类是RedHat系列,另一类是Debian系列。这里我们针对这两类Linux的软件包管理做一些分析,我自己用的是CentOS,这里主要介绍RedHat系列Linux软件包管理,Debian系列Linux软件包管理我们大概提一些。一、RedHat系列Linux软件包管理我们分三方面介绍RedHat系列Linux软件包管理:二进制软件包管理(
2013-09-06 21:50:24
1020
原创 linux引导流程分析
学习Linux首先要做的工作,我觉得就是了解它的引导流程,这样我们才能深入地了解系统。好啦,赶紧进入今天正题吧。 首先简单地概括下Linux的启动过程: 1、加载BIOS的硬件信息与进行自我测试,并依据设置取得第一个可启动的设备; 2、读取并执行第一个启动设备内MBR的的Boot Loader(即是grub,spfdisk等程序); 3、依据
2013-09-06 21:40:43
987
原创 Vim/Vi
Vim/Vi(以下简称vi)是Linux上一款功能非常强大的文本编辑器,用于编辑配置文件或者写shell脚本效率还是蛮高的。其实vi水挺深的,通常我们只要学习以下它的基本用法就行了,有兴趣的朋友可以去读下《Learning the VI Editor》这本书。虽然说只是学习vi的基本用法,但是一下子接受这么多的命令,三两下就晕了,所以就有必要记录下,下面是我个人学习vi的一些小小总结。首先
2013-09-06 21:32:15
948
原创 linux文件打包压缩
我们知道Linux不像Windows以文件后缀名来判断文件类型。如果我们遇到一个没有后缀名的压缩文件,那我们该怎么选择解压方式呢?Linux为我们提供了file命令。我们可以用这个命令来查看文件类型。下面我总结几种比较实用也是常用的压缩解压方式。 一、gzip压缩文件。gzip压缩后的文件格式是.gz。这个gzip比较有个性,其一就是它只能压缩文件,对目录却不来电(有问题就要解决,
2013-09-06 21:21:59
1226
原创 通过广播监听HOME事件
android4.0以后在应用层使用传统监听按键方法监听不到HOME事件,网上多种实现方法,转载最多的是通过匹配logcat的输出来判断HOME事件。这种方法需要运行一个线程一直去读取logcat内容然后进行比对,个人认为这种方法的效率比较低。这里提供一种借助广播来实现HOME的监听的方法。private final BroadcastReceiver homeReceiver = new
2013-09-06 20:59:47
958
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人