第四步.将下载下来的字体压缩包右键解压,获得字体文件,将这些字体文件都拖入91助手目录:/System/Library/Fonts/Cache中去,然后替换原字体文件。(再次提醒替换字体文件前必须先备份原文件,以备以后还原使用)
PS:这里以浪漫雅圆中英文体为例。
第五步.勾选【应用于本次所有操作】,点击按钮【替换】,然后91助手就会为你自动替换原文件了。
最后.重启机子即可看到新字体。
替换字体常见问题
问题1:我的机子上的字体出现各种方框,怎么办?
解决方法:将之前备份的iOS7原生字体,覆盖回去。
问题2:我的机子上只有通讯录或某些程序出现方框,怎么解决?
解决方法:打开设置--通用--辅助功能--较大字体(选择关闭)/粗体文本(选择关闭)!
(图老师整理)二、备份字体
可以对某个字体进行下载备份,也可以通过下载整个Fonts文件夹来备份全部的系统字体,以备不时之需。
前提条件:iPhone/iPad/iPod Touch已越狱
必备工具:PC端91助手
操作步骤:
第一步.使用数据线将iPhone/iPad/iPod Touch与电脑连接。
第二步.打开PC端91助手,进入文件管理目录/System/Library。
第三步.鼠标左键点击选中文件夹Fonts,再点击按钮【下载到电脑】,91助手就会自动帮助您下载备份系统字体。
三、还原字体
打开PC端91助手,进入文件管理目录/System/Library。依次点击按钮【上传到设备】-【上传目录】,然后将之前备份的文件夹Fonts上传到设备上去即可。
所需工具:螺丝刀、吸盘(可以用毛绒玩具上的)
首先将iphone关机,用螺丝刀卸掉机身底部的两颗螺丝。用塑料吸盘吸附到屏幕底部的左右两端,轻轻向外提拉,慢慢将屏幕面板从机壳内提取出来。
抬起屏幕后,会看到机壳内部用数字标示的排线,数字顺序即代表拆解顺序。用螺丝刀依次撬开1、2号排线插头,就能看到3号排线了。
3号排线就是需要更换的感应排线,主要功能是为光线感应、距离感应和听筒工作供应电力、传输数据。撬起排线插座上的白色塑料卡子,轻轻抽出3号排线,就可使屏幕和机体彻底分离。
要更换排线必须先卸开屏幕,卸掉屏幕背面右上方和两侧的6颗螺丝,轻轻向外侧掰屏幕金属边框的同时,向上提拉屏幕右下角的突出部位,使液晶屏脱离屏幕边框。
感应排线被一块小铁片扣在屏幕边框上,在下图标识部位用螺丝刀向外撬,将铁片从边框上取(图老师整理)下。感应排线是粘贴在铁片上的,将排线从铁片上撕下来,把新排线背面的贴纸撕掉,对准排线和铁片上的两个圆孔位置,把新排线粘贴到铁片上。
接下来按照之前拆解的反顺序,重新组装屏幕,接好排线插头,开机测试,距离感应功能正常,修复成功。然后将屏幕面板装入机壳,上好螺丝就可以了。
故障分析:故障出现之前,笔者为了研究曾拆过机,在拆卸感应排线时,未注意到需要先打开塑料卡子,而是直接硬拔出来。插入时其实很轻松,只要将排线的金手指部分插入插座即可,而我是使用镊子夹着排线硬往插座里插,以为要将排线插头部分全部插入,因错误操作导致排线出现故障。在此,提醒喜欢钻研的朋友,拆卸手机须谨慎操作,切勿蛮干,对于尚在保修期内的手机切勿进行拆卸,以免失去保修权利。
TIPS:手机排线就是手机主板连接手机显示屏、摄像头、键盘等设备的连接线,其主要作用是负责手机主板与其它设备之间的数据传输。手机排线故障主要表现为:花屏、不显示、无灯光、听筒无声、无振铃、不开机、按键失灵等等。
【 iPhone/iPad破解有什么用?】
破解(也称解锁)一词一直都是和越狱一起被提到,而相比越狱,破解针对的设备是有网络锁的iOS设备,比如iPhone或者3G版的iPad。很多运营商为了限制用户在购买自己的合约手机之后,使用其他运营商的SIM卡,对出售的手机加上了网络锁,只能使用指定运营商的SIM卡,这就是我们常常提到的网络锁。
而破解tuLaoShi.com(解锁)就是指去除运营商对手机等设备的网络锁,从而使用任意其他运营商的SIM卡和手机号码。尤其是水货手机,大多都还有网络锁,在国内都是无法使用中国联通或中国移动的SIM卡。
【iPhone/iPad破解与越狱有什么区别?】
破解(解锁)是在越狱的基础上来实现的,所以想要破解,必须越狱。只有在极其个别的情况下,可以不越狱直接破解iPhone或者iPad。
objective c 截屏代码
-(void)save{
UIGraphicsBeginImageContext(mybackgroundview.bounds.size); //currentView 当前的view
[mybackgroundview.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
UIImageWriteToSavedPhotosAlbum(viewImage, nil, nil, nil);
}截取 您想要的一层
UIGraphicsBeginImageContext(CGSizeMake(320, 300)); //currentView 当前的view
[self.view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
UIImageWriteToSavedPhotosAlbum(viewImage, nil, nil, nil);
截取自定义的大小
刚刚用到 不知道 是不是您想要的
开发iPhone 应用程序并不难,基本上就是三个词 - memory, memory, memory 。iPhone OS 对内存的要求很严格,有memory leak ,杀掉; 内存使用超限额,杀掉。一个经过测试的程序,在使用过程中90%以上的崩溃都是内存问题造成的。在这里简单总结一下Object-C 内存管理。
基本概念
Object-C 的内存管理基于引用计数(Reference Count)这种非常常用的技术。简单讲,如果要使用一个对象,并希望确保在使用期间对象不被释放,需要通过函数调用来取得所有权,使用结束后再调用函数释放所有权。所有权的获得和释放,对应引用计数的增加和减少,为正数时代表对象还有引用,为零时代表可以释放。
函数
获得所有权的函数包括
alloc - 创建对象是调用alloc,为对象分配内存,对象引用计数加一。
copy - 拷贝一个对象,返回新对象,引用计数加一。
retain - 引用计数加一,获得对象的所有权。
另外,名字中带有alloc, copy, retain 字串的函数也都认为会为引用计数加一。
释放所有权的函数包括
release - 引用计数减一,释放所有权。如果引用计数减到零,对象会被释放。
autorelease - 在未来某个时机释放。下面具体解释。
autorelease
(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/isyjq/)在某些情况下,并不想取得所有权,又不希望对象被释放。例如在一个函数中生成了一个新对象并返回,函数本身并不希望取得所有权,因为取得后再没有机会释放(除非创造出新的调用规则,而调用规则是一切混乱的开始),又不可能在函数内释放,可以借助autorelease 。所谓autorelease , 可以理解为把所有权交给一个外在的系统(这个系统实际上叫autorelease pool),由它来管理该对象的释放。通常认为交给 autorelease 的对象在当前event loop 中都是有效的。也可以自己创建NSAutoreleasePool 来控制autorelease的过程。
据苹果的人说,autorelease效率不高,所以能自己release的地方,尽量自己release,不要随便交给autorelease来处理。
规则
引用计数系统有自己的引用规则,遵守规则就可以少出错:
获得所有权的函数要和释放所有权的函数一一对应。
保证只有带alloc, copy, retain 字串的函数才会让调用者获得所有权,也就是引用计数加一。
在对象的 dealloc函数中释放对象所拥有的实例变量。
永远不要直接调用dealloc来释放对象,完全依赖引用计数来完成对象的释放。
有很多类都提供便利构造函数(convenience constructors),它们创建对象但并不增加引用计数,意味着不需要调用release来释放所有权。很好辨认,它们的名字中不会有alloc和copy。
只要遵守这些规则,基本上可以消除所有Intrument可以发现的内存泄露问题。
容器
类似NSArray, NSDictionary, NSSet 等类,会在对象加入后引用计数加一获得所有权,在对象被移除或者整个容器对象被释放的时候释放容器内对象的所有权。类似的情况还有UIView对 subview的所有权关系,UINavigationController对其栈上的controller的所有权关系等等。
其他所有权的产生
还有一些用法会让系统拥有对象的所有权。比如NSObject 的performSelector:withObject:afterDelay 。如果有必要,需要显示的调用cancelPreviousPerformRequestsWithTarget:selector:object: ,否则有可能产生内存泄露。
因这种原因产生的泄露因为并不违反任何规则,是Intrument所无法发现的。
循环引用
所有的引用计数系统,都存在循环应用的问题。例如下面的引用关系:
对象a创建并引用到了对象b.
对象b创建并引用到了对象c.
对象c创建并引用到了对象b.
这时候b和c的引用计数分别是2和1。当a不再使用b,调用release释放对b的所有权,因为c还引用了b,所以b的引用计数为1,b不会被释放。b不释放,c的引用计数就是1,c也不会被释放。从此,b和c永远留在内存中。
这种情况,必须打断循环引用,通过其他规则来维护引用关系。比如,我们常见的delegate往往是assign方式的属性而不是retain方式的属性,赋值不会增加引用计数,就是为了防止delegation两端产生不必要的循环引用。如果一个UITableViewController 对象a通过retain获取了UITableView对象b的所有权,这个UITableView对象b的delegate又是a, 如果这个delegate是retain方式的,那基本上就没有机会释放这两个对象了。自己在设计使用delegate模式时,也要注意这点。
因为循环引用而产生的内存泄露也是Instrument无法发现的,所以要特别小心。
一些和内存管理相关的有用内容:
Objective-C2.0 号称可以支持Garbage Collection了, 也就是垃圾回收,但是我还没在xcode以及文档中找到相关的用法,也懒得去查了。 关于garbage collection的内容也没啥可说的, 想说说这几天遇到的无GC情况下的几个内存相关问题。
Objective-C 的autorelease确实给开发省了不少事情提高了开发效率, 这对于Mac OSX桌面开发没问题,因为内存大不存在内存紧张的局面。但是如果要为iPhone开发程序, 还是慎用 autorelease的好, 否则只好等程序退出时再清理内存了。 在iphone上最好不要保存不必要的对象, 使用的时候在创建,比如图片、文件等等。 还有一点要注意的就是UITableView, 如果你是把UITableView放在UITableViewCOntroller中,那么别担心,没有什么问题,如果你是在 UIViewController或者其子类里放置UITableView,那么注意了, 在Pop掉 viewcontroller的时候一定记得先图老师把UItableView的delegate设置为空, 也就是 [tableView setDelegate:nil] ,之所以这样做, 是因为tableVietulaoShi.comw的delegate是个retain,会保存对象, 所以如果你不在pop之前将delegate设为nil, 将不会调用view controller的dealloc,内存也就无法释放, 这么来几下恐怕就要内存吃紧了。
总结了几条内存使用经验
1. 对象现用现创建
2. 所有用alloc,new , retain等创建的对象都需要调用release去释放, 千万别发送release消息给autorelease对象, 否则只能over了
3. 注意delegate,如果时retain类型,最好在释放之前将之设为nil
4. 在频繁使用alloc的地方(循环) 创建自己的NSAutoReleasePool
5. 对于UIImage对象慎用 [UIImage imageNamed:], 使用[UIImage imageWithContentOfFile:] 或者[image initWithContentOfFile:]