|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
只能IB识别IB也没那么高深XIB文件解开之后就是一堆代码之前面过一家小公司看我当时写的程序里面用到了IB一脸不屑Android的使用被限定为最多占用16m的内存,最少在T-MobileG1上是如许的(固然如今已有几百兆的内存能够用了——译者注)。它包含德律风自己占用的和开辟者可使用的两部分。即便你没有占用全体内存的盘算,你也应当只管少的利用内存,以避免其余使用在运转的时分封闭你的使用。Android能在内存中坚持的使用越多,用户在切换使用的时分就越快。作为我的一项事情,我细心研讨了Android使用的内存保守成绩,年夜多半情形下它们是由统一个毛病引发的,那就是对一个高低文(Context)坚持了长工夫的援用。
在Android中,高低文(Context)被用作良多操纵中,可是年夜部分是载进和会见资本。这就是一切的widget城市在它们的机关函数中承受一个高低文(Context)参数。在一个及格的Android使用中,你一般可以用到两种高低文(Context):举动(Activity)和使用(Application)。举动(Activity)一般被传送给必要高低文(Context)参数的类大概办法:
Sourcecode
<br>
<br>
<br>- @OverrideprotectedvoidonCreate(Bundlestate){super.onCreate(state);TextViewlabel=newTextView(this);label.setText("Leaksarebad");setContentView(label);}
复制代码 这就意味着谁人View有一个对全部举动(Activity)的援用而且对这个举动(Activity)中坚持的一切对象有坚持了援用;一般它们包含全部View的条理和它的一切资本。因而,假如你“保守”了高低文(Context)(这里“保守”的意义是你坚持了一个援用而且构造GC搜集它),你将形成大批的内存保守。假如你不敷当心的话,“保守”一全部举动(Activity)是件十分复杂的事变。
当屏幕的偏向改动时体系会默许的烧毁以后的举动(Activity)而且创立一个新的而且坚持了它的形态。如许的了局就是Android会从资本中从头载进使用的UI。如今设想一下,你写了一个使用,有一个十分年夜的位图,而且你其实不想在每次扭转时都从头载进。保存它而且每次扭转不从头加载的最复杂的举措就是把它保留在一个静态字段上:
Sourcecode
<br>
<br>
<br>- privatestaticDrawablesBackground;@OverrideprotectedvoidonCreate(Bundlestate){super.onCreate(state);TextViewlabel=newTextView(this);label.setText("Leaksarebad");if(sBackground==null){sBackground=getDrawable(R.drawable.large_bitmap);}label.setBackgroundDrawable(sBackground);setContentView(label);}
复制代码 这段代码十分快,同时也错的够离谱。它保守了当第一次屏幕角度改动时创立的第一个举动(Activity)。当一个Drawable被附加到一个View,这个View被设置为drawable的一个回调。在下面的代码片段中,这意味着这个Drawable对TextView有一个援用,同时这个TextView对Activity(Context对象)坚持着援用,同时这个Activity对良多对象又有援用(这个几还要看你的代码了)。
这个例子是形成Context保守的最复杂的一个缘故原由,你能够看一下我们在主屏幕源码(检察unbindDrawables()办法)中是经由过程在Activity烧毁时设置保留过的Drawable的回调为空来办理这个成绩的。更加风趣的是,你能够创立一个context保守的链,固然这十分的糟。它们可让你缓慢的用光一切的内存。
在python中的函数__xxxNSString字符串NSArray数组NSDictionary字典这些都需要弄很清楚其他的类都是一个套路NSMutableArray这样带Mutable的类代表可变的 |
|