欢迎来到得宠网,您可以在这里系统的学习到有关宠物饲养等专业知识!
首页 > 网友投稿 > 正文
项若瑶头像
项若瑶

2023-05-31 16:05:01

游客

Android 和 iOS 应用开发有哪些不同(ios和安卓分别基于什么语言开发的)

今天得宠网给各位分享ios 设置arc的知识,其中也会对Android 和 iOS 应用开发有哪些不同(ios和安卓分别基于什么语言开发的)进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在我们开始吧!

Android 和 iOS 应用开发有哪些不同

两个平台对于开发来说,最大的不同是理念的不同

ios的理念是要把绝大多数的计算包括内存管理交给编码时的程序员(手动内存管理)或编译时交给编译器去自动插入retain、release(自动引用记数)。还包扩有人喜欢有人讨厌的手动计算布局,都为了提升运行时的速度。
而android的理念是在运行时帮助开发者处理很多计算,布局的相对位置(ios 6.0之后虽然也支持自动布局,但是不会兼容旧版本)。还有最重要的就是GC了,它的好处是让开发人员尽量不必在编码时关注内存管理(不是完全不去管),但是如果代码写的有问题,它实在是影响运行效率,因为GC运行时使用的多个算法都是要暂停所有线程的
成本门槛和营收能力的差别基本上也是有目共睹,而发展前景真的是没法说,都不是预言家,但是觉得有前事之师如ms与apple,现在两家都挺好的嘛!

ios 在哪里设置工程支持arc与否

  旧工程配置arc方案:

  1,直接在targets->build phases中修改compiler Flags,是否支持arc。添加:-fobjc-arc,就可以让旧项目支持arc。如果想让原来支持arc的不使用arc则添加-fno-objc-arc

  2,因为在build phases中可以改变是否支持arc,所以应该在代码中添加判断是否支持arc,这样不管以后.m的arc是否改变,都不用再次调整代码。

  下面是一个.h文件(附件中也上传了.h),整合了arc的各种属性、release判断,直接#import在你想使用arc的类中即可。

  #ifndef paixiu_PXISARC_h

  #define paixiu_PXISARC_h

  #ifndef PX_STRONG

  #if __has_feature(objc_arc)

  #define PX_STRONG strong

  #else

  #define PX_STRONG retain

  #endif

  #endif

  #ifndef PX_WEAK

  #if __has_feature(objc_arc_weak)

  #define PX_WEAK weak

  #elif __has_feature(objc_arc)

  #define PX_WEAK unsafe_unretained

  #else

  #define PX_WEAK assign

  #endif

  #endif

  #if __has_feature(objc_arc)

  #define PX_AUTORELEASE(expression) expression

  #define PX_RELEASE(expression) expression

  #define PX_RETAIN(expression) expression

  #else

  #define PX_AUTORELEASE(expression) [expression autorelease]

  #define PX_RELEASE(expression) [expression release]

  #define PX_RETAIN(expression) [expression retain]

  #endif

  #endif

  说明:在arc中,strong对应原来的retain与copy,weak对应原来的assign。

  EX:举例使用autorelease:

  NSArray *testArray = PX_AUTORELEASE([[NSArray alloc] init]);

  //如果支持arc,testArray就只是alloc init,release的事情由系统来做。

  //如果不支持arc,那这条语句相当于:

  NSArray *testArray = [[[NSArray alloc] init] autorelease];

  这样不管以后改不改arc,都不会内存泄漏了 .

  所以,arc的使用有两点:

  A:在build phases中修改compiler Flags值。

  B:在代码中判断是否支持arc,包括对属性(property)、释放(release)的判断。

  3,在dealloc中需要这样做:

  类如果注册了通知(观察者模式),需要remove掉。这个不管是否支持arc,都必须要做的。

  - (void)dealloc {

  [[NSNotificationCenterdefaultCenter] removeObserver:self];//如果注册了通知的话。

  [self removeObserver:self forKeyPath:keyPath];//如果注册了kvo的话。

  #if !__has_feature(objc_arc) //在这里也需要判断是否支持arc,支持的话就执行旧工程中该release的语句.

  [array release]; //array代表alloc但没有autorelease的变量

  [super dealloc];

  #endif

  }

  4,另外加点block的判断,这个是在4.0以后有的,当然也可以不进行判断,因为现在大多数都4.0以后了。

  #if NS_BLOCKS_AVAILABLE

  #endif

  

  总结:

  1,arc的设置是在build phases中修改compiler Flags的值。

  2,如果使用了arc,在你的代码中不可以使用retain, release, autorelease,如果使用的话会报错。

  3,如果使用了arc,在@property声明中,用strong和weak代替相应的retain, copy,和assign。

  4,如果使用了arc,NSAutoReleasePool也不能使用,测试发现,用@autoreleasepool 代替,不会编译报错。

  

  总之,一切你之前“背过”的那几条内存管理规则,你都不用去管了。而且,个人感觉,用arc代码清晰很多,而且效率也提高了些。
转载

xcode6.0怎样设置arc

在Project里面 搜索 Automatic Reference Counting 你可以搜到一项

这个设置为YES即可

iOS条件编译之判断当前编译环境是不是arc

一开始我觉得ARC真他X是个好到爆的东西,因为本人从C++年代就特别不喜欢做dealloc之类的事情,导致在刚开始进行iOS开发的时候常年因为各种忘记写release导致程序崩溃……当时为了这个,我甚至潜行研究xcode内置的脚本功能,希望能代替我自动写release……现在想起来当时真是懒到爆……不过在正式使用ARC之后,各种各样的问题就出现了……首先,和非ARC代码混用问题。前段时间我在写一个微博客户端,写道某个阶段的时候,突然发现底层实现不能出现了不能预测的崩溃,经过几个晚上的通宵研究之后,我发现那就是傻叉ARC和非ARC代码混用问题。网上很多人说对于非ARC代码,只需要在编的时候加上那啥-FOBJ-ARC啥的就好了,实际上不是的!因为加上这个代码之后,一旦你的程序中有ARC和非ARC这两个CLASS之间交互的时候,就会莫名的出现内存泄露!而且泄漏得莫名其妙……最终解决方案只能重写其中一个class以保证两者均为ARC或者非ARC……然后,我要说一下那个该死的_weak……这货,说实在话,我已经用了很长一段时间了,不过还是比较不放心……不,非常不放心才对。最主要原因是:这货的release位置不可判断……不知道是不是因为我程序function太多的原因,根据监测,那个class里面的一个weakA的消灭位置是不定的……在我读懂苹果官方文档之前,我只能把那货给列为一个不确定变量了……现在为了程序稳定暂时用以个永远不释放的strongA来做的处理……说实在……真有那么一瞬间……就那一瞬间……我好怀念没有ARC的年代……最后关于内存泄露,这个我只能呵呵了,我这边某个程序,在uiviewclass下面添加一个uiscrollview和一个uiimageview之后必定会出现各种内存溢出……至今不理解为啥会这样……哪怕两个变量里面都是空,还是会报内存不足……这个项目还有一周交工,所以我……非常紧张……===========体内酒精含量:0.4%===========上面说了很多,大部分都是废话……给自己跪一个,然后码代码去……===========走之前===========狼大人你作为iOS开发专业人士不给个答案么?

怎么样在iOS开发中用ARC和MRC混编

在targets的build phases选项下Compile Sources下选择要不使用arc编译的文件,双击它,输入 -fno-objc-arc 即可

MRC工程中也可以使用ARC的类。方法如下:
在targets的build phases选项下Compile Sources下选择要使用arc编译的文件,双击它,输入 -fobjc-arc 即可

ios 怎么把arc文件转成arc文件

应该是“ IOS ARC 和 非ARC 之间的转换方法”
1,选择项目中的Targets,选中你所要操作的Target,
2,选Build Phases,在其中Complie Sources中选择需要ARC的文件双击, 并在输入框中输入:-fobjc-arc,如果不要ARC则输入:-fno-objc-arc

怎么样在iOS开发中用ARC和MRC混编

在targets的build phases选项下Compile Sources下选择要不使用arc编译的文件,双击它,输入 -fno-objc-arc 即可

MRC工程中也可以使用ARC的类。方法如下:
在targets的build phases选项下Compile Sources下选择要使用arc编译的文件,双击它,输入 -fobjc-arc 即可

刚接触objective-c碰到ARC这个东西,困惑还有必要学手动管理内存吗?

学习iOS开发内存这块是必须要清楚的,建议刚开始学习写代码时手动管理内存,对iOS管理内存的机制比较清楚了后,再使用ARC(自动引用计数)机制即建arc模式的工程。即使是使用ARC(自动引用计数)也要了解iOS的内存管理机制,在做客户端应用程序的时候有点内存泄漏可能感觉不到什么,但是要开发手机游戏对内存的要求就比较高了,如果你不了解iOS管理内存的机制,只会用ARC让系统帮你管理内存,可以说你的知识结构是有缺陷的,在解决一些程序中遇到的bug时会浪费掉你大量的时间,最后还有了解iOS内存管理机制。所以通过手动管理内存来深刻了解iOS内存管理机制还是很有必要的。。。

ios 怎么设置对所有的文件变成非arc

应该是“ IOS ARC 和 非ARC 之间的转换方法”
1,选择项目中的Targets,选中你所要操作的Target,
2,选Build Phases,在其中Complie Sources中选择需要ARC的文件双击, 并在输入框中输入:-fobjc-arc,如果不要ARC则输入:-fno-objc-arc

IOS开发 arc与非Arc代码的区别

是属于ios开发中的内存管理问题:在这我简要概述一下,详细讲的话内容挺多,而且是作为一个ios开发人员,或ios开发爱好者,这是必须了解的:
Objective-c中提供了两种内存管理机制MRC(MannulReference Counting)和ARC(Automatic Reference Counting),分别提供对内存的手动和自动管理,来满足不同的需求。其实arc 内部机制原理也是来源于mrc ,arc 是在 iOS 5/ Mac OS X 10.7 开始导入,利用 Xcode4.2 可以使用该机能。arc的首要目的就是让代码简洁化,编程简单化,开发更顺心应手,减少不必要的小问题小疏忽;顾名思义,自动引用计数管理,关于内存的申请,使用和释放过程都交给系统自动实现,我们可也不用关系里面的过程,但是事实上还是mrc的原理,只是是系统帮我们做了管理;
mrc,手动引用计数器管理,是在我们申请到某一块内存,在使用之后,要手动释放,释放机理涉及到计数器问题,如果未释放内存,会造成内存的浪费,俗称内存泄露,甚至引起很多未知的错误结果,这对程序有威胁很大,但是,何时释放,怎么释放,注意哪些问题,很有讲究,这就是mrc的不便之处,也是苹果推出arc的缘由;
mrc的具体机理,计数器是什么,在程序过程中的变化,在达到什么程度会释放内存,怎么操作;建议查阅相关文档;
mrc ,在代码上下形式主要表现为,调用该对象时,要做retain操作,使用完成后要release,最后还要重写dealloc方法,对该类的所有对象做释放,所以在mrc的代码会有autorelease,retain,release等词语,
而arc不允许有这些词汇,应为这些操作都由系统自动完成。

引用计数器
1.和内存管理相关的方法
1)alloc 引用计数器自动设为1
2)retain 引用计数器+1 返回了经过+1以后的当前实例对象
3)release 引用计数器-1,并不一定是释放
4)retainCount 获取引用计数器的值
5)dealloc 当实例对象被销毁之前,系统自动调用。
一定要调[super dealloc]

和内存管理相关的名词
1)僵尸对象:此对象被销毁,不能再使用,不能给它发送任何消息
2)野指针:指向僵尸对象(不可用的内存)的指针,给野指针发送消息将会产生不可控的后果。
3)空指针:没有指向任何对象的指针,给空指针发消息不会产生任何行为

内存管理原则
1.如果你想持有某个对象,就必须负责让做一次retain操作,引用计数器+1.
2.如果你想放弃对某个对象的持有权,就要负责让其做一次release操作,引用计数器-1.

3.谁retain,谁release。

版权声明:本站所提供的文章、图片等内容均为用户发布或互联网整理而来,仅供学习参考,如有侵犯您的版权,请联系我们客服人员删除。

1

精彩推荐

暂无评论

文明用语