导航:首页 > 源码编译 > Arc运行时编译时

Arc运行时编译时

发布时间:2022-09-10 16:26:44

❶ 您arcGIS运行时脚本错误如何解决

在customize选择arcmap option 然后清一下数据交互的缓存和其他缓存试试

❷ arc是一种编译时特性还是运行时特性

ARC本质 ARC编译器()特性运行特性更垃圾收器(GC) Automatic Reference Counting (ARC) is a compiler-level feature that simplifies the process of managing object lifetimes (memory management) in Cocoa applications. ARC相于MRC(Manual Reference Counting或称非ARC文我直使用MRC指代非ARC管理式)改进前技术本质没区别具体信息参考ARC编译器官文档 ARC启与关闭 同于XCode四创建工程选择关闭ARCXCode5创建工程默认启ARC没关闭ARC选项 需要特定文件启或关闭ARC工程选项选择Targets -> Compile Phases -> Compile Sources面找应文件添加flag: 打ARC:-fobjc-arc 关闭ARC:-fno-objc-arc 图: ARC修饰符 ARC主要提供四种修饰符别:__strong,__weak,__autoreleasing,__unsafe_unretained __strong 表示引用强引用应定义property"strong"所象没任何强引用指向才释放 注意:声明引用加修饰符引用默认强引用需要释放强引用指向象需要强引用置nil __weak 表示引用弱引用应定义property用"weak"弱引用影响象释放即要象没任何强引用指向即使依00弱引用象指向没用该象依释放象释放同指向弱引用自置nil技术叫zeroing weak pointer效防止效指针、野指针产__weak般用delegate关系防止循环引用或者用修饰指向由Interface Builder编辑与UI控件 __autoreleasing 表示autorelease pool自释放象引用MRC代autorelease用相同定义property能使用修饰符任何象property都应该autorelease型 见误解ARC没autorelease自释放看起像点余误解能源自于ARC自autorelease自混淆其实要看每iOS Appmain.m文件能知道autorelease仅存着并且变更fashion:需要再手工创建需要再显式调用[drain]释放内存池 两行代码意义相同 NSString *str = [[[NSString alloc] initWithFormat:@"hehe"] autorelease]; // MRC NSString *__autoreleasing str = [[NSString alloc] initWithFormat:@"hehe"]; // ARC 关于autoreleasepool做展详细信息参考官文档或者其文章 __autoreleasingARC主要用参数传递返值(out-parameters)引用传递参数(pass-by-reference)情况 __autoreleasing is used to denote arguments that are passed by reference (id *) and are autoreleased on return. 比用NSError使用: NSError *__autoreleasing error; if (![data writeToFile:filename options:NSDataWritingAtomic error:&error]) { NSLog(@"Error: %@", error); } (面writeToFileerror参数类型(NSError *__autoreleasing *)) 注意error定义strong型编译器帮隐式做事情保证终传入函数参数依__autoreleasing类型引用 NSError *error; NSError *__autoreleasing tempError = error; // 编译器添加 if (![data writeToFile:filename options:NSDataWritingAtomic error:&tempError]) { error = tempError; // 编译器添加 NSLog(@"Error: %@", error); } 所提高效率避免种情况我般定义error候其(实实==)声明__autoreleasing类型: NSError *__autoreleasing error; 加__autoreleasing相于MRC返值error做事情: *error = [[[NSError alloc] init] autorelease]; *error指向象创建放入autoreleasing pool等待使用结束自释放函数外error使用者并需要关*error指向象释放 另外点ARC所种指针指针 (NSError **)函数参数加修饰符编译器默认认定__autoreleasing类型 比面两段代码等同: - (NSString *)doSomething:(NSNumber **)value { // do something } - (NSString *)doSomething:(NSNumber * __autoreleasing *)value { // do something } 除非显式给value声明__strong否则value默认__autoreleasing 点某些类隐式使用自autorelease pool种候使用__autoreleasing类型要特别 比NSDictionary[]: - (void)loopThroughDictionary:(NSDictionary *)dict error:(NSError **)error { [dict :^(id key, id obj, BOOL *stop){ // do stuff if (there is some error && error != nil) { *error = [NSError errorWithDomain:@"MyError" code:依 userInfo:nil]; } }]; } 隐式创建autorelease pool面代码实际类似于: - (void)loopThroughDictionary:(NSDictionary *)dict error:(NSError **)error { [dict :^(id key, id obj, BOOL *stop){ @autoreleasepool // 隐式创建 { if (there is some error && error != nil) { *error = [NSError errorWithDomain:@"MyError" code:依 userInfo:nil]; } } }]; // *error 已经dict做枚举遍历创建autorelease pool释放掉 :( } 能够使用*error我需要strong型临引用dict枚举Block用临引用保证引用指向象dict枚举Block释放确式: - (void)loopThroughDictionary:(NSDictionary *)dict error:(NSError **)error { __block NSError* tempError; // 加__block保证Block内修改 [dict :^(id key, id obj, BOOL *stop) { if (there is some error) { *tempError = [NSError errorWithDomain:@"MyError" code:依 userInfo:nil]; } }] if (error != nil) { *error = tempError; }

❸ iOS应用开发:什么是ARC

ARC是iOS 5推出的新功能,全称叫 ARC(Automatic Reference Counting)。简单地说,就是代码中自动加入了retain/release,原先需要手动添加的用来处理内存管理的引用计数的代码可以自动地由编译器完成了。
该机能在 iOS 5/ Mac OS X 10.7 开始导入,利用 Xcode4.2 可以使用该机能。简单地理解ARC,就是通过指定的语法,让编译器(LLVM 3.0)在编译代码时,自动生成实例的引用计数管理部分代码。有一点,ARC并不是GC,它只是一种代码静态分析(Static Analyzer)工具。

变化点
通过一小段代码,我们看看使用ARC前后的变化点。

C代码
@interface NonARCObject : NSObject {
NSString *name;
}
-(id)initWithName:(NSString *)name;
@end

@implementation NonARCObject
-(id)initWithName:(NSString *)newName {
self = [super init];
if (self) {
name = [newName retain];
}
return self;
}

-(void)dealloc {
[name release];
[Super dealloc];
}
@end

C代码
@interface ARCObject : NSObject {
NSString *name;
}
-(id)initWithName:(NSString *)name;
@end

@implementation ARCObject
-(id)initWithName:(NSString *)newName {
self = [super init];
if (self) {
name = newName;
}
return self;
}
@end

我们之前使用Objective-C中内存管理规则时,往往采用下面的准则

生成对象时,使用autorelease
对象代入时,先autorelease后再retain
对象在函数中返回时,使用return [[object retain] autorelease];
而使用ARC后,我们可以不需要这样做了,甚至连最基础的release都不需要了。

总结:

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

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

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

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

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

❹ arc是一种编译时特性还是运行时特性

ARC本质
ARC编译器()特性运行特性更垃圾收器(GC)
Automatic
Reference
Counting
(ARC)
is
a
compiler-level
feature
that
simplifies
the
process
of
managing
object
lifetimes
(memory
management)
in
Cocoa
applications.
ARC相于MRC(Manual
Reference
Counting或称非ARC文我直使用MRC指代非ARC管理式)改进前技术本质没区别具体信息参考ARC编译器官文档
ARC启与关闭
同于XCode四创建工程选择关闭ARCXCode5创建工程默认启ARC没关闭ARC选项
需要特定文件启或关闭ARC工程选项选择Targets
->
Compile
Phases
->
Compile
Sources面找应文件添加flag:
打ARC:-fobjc-arc
关闭ARC:-fno-objc-arc
图:
ARC修饰符
ARC主要提供四种修饰符别:__strong,__weak,__autoreleasing,__unsafe_unretained
__strong
表示引用强引用应定义property"strong"所象没任何强引用指向才释放
注意:声明引用加修饰符引用默认强引用需要释放强引用指向象需要强引用置nil
__weak
表示引用弱引用应定义property用"weak"弱引用影响象释放即要象没任何强引用指向即使依00弱引用象指向没用该象依释放象释放同指向弱引用自置nil技术叫zeroing
weak
pointer效防止效指针、野指针产__weak般用delegate关系防止循环引用或者用修饰指向由Interface
Builder编辑与UI控件
__autoreleasing
表示autorelease
pool自释放象引用MRC代autorelease用相同定义property能使用修饰符任何象property都应该autorelease型
见误解ARC没autorelease自释放看起像点余误解能源自于ARC自autorelease自混淆其实要看每iOS
Appmain.m文件能知道autorelease仅存着并且变更fashion:需要再手工创建需要再显式调用[drain]释放内存池
两行代码意义相同
NSString
*str
=
[[[NSString
alloc]
initWithFormat:@"hehe"]
autorelease];
//
MRC
NSString
*__autoreleasing
str
=
[[NSString
alloc]
initWithFormat:@"hehe"];
//
ARC
关于autoreleasepool做展详细信息参考官文档或者其文章
__autoreleasingARC主要用参数传递返值(out-parameters)引用传递参数(pass-by-reference)情况
__autoreleasing
is
used
to
denote
arguments
that
are
passed
by
reference
(id
*)
and
are
autoreleased
on
return.
比用NSError使用:
NSError
*__autoreleasing
error;
if
(![data
writeToFile:filename
options:NSDataWritingAtomic
error:&error])
{
NSLog(@"Error:
%@",
error);
}
(面writeToFileerror参数类型(NSError
*__autoreleasing
*))
注意error定义strong型编译器帮隐式做事情保证终传入函数参数依__autoreleasing类型引用
NSError
*error;
NSError
*__autoreleasing
tempError
=
error;
//
编译器添加
if
(![data
writeToFile:filename
options:NSDataWritingAtomic
error:&tempError])
{
error
=
tempError;
//
编译器添加
NSLog(@"Error:
%@",
error);
}
所提高效率避免种情况我般定义error候其(实实==)声明__autoreleasing类型:
NSError
*__autoreleasing
error;
加__autoreleasing相于MRC返值error做事情:
*error
=
[[[NSError
alloc]
init]
autorelease];
*error指向象创建放入autoreleasing
pool等待使用结束自释放函数外error使用者并需要关*error指向象释放
另外点ARC所种指针指针
(NSError
**)函数参数加修饰符编译器默认认定__autoreleasing类型
比面两段代码等同:
-
(NSString
*)doSomething:(NSNumber
**)value
{
//
do
something
}
-
(NSString
*)doSomething:(NSNumber
*
__autoreleasing
*)value
{
//
do
something
}
除非显式给value声明__strong否则value默认__autoreleasing
点某些类隐式使用自autorelease
pool种候使用__autoreleasing类型要特别
比NSDictionary[]:
-
(void)loopThroughDictionary:(NSDictionary
*)dict
error:(NSError
**)error
{
[dict
:^(id
key,
id
obj,
BOOL
*stop){
//
do
stuff
if
(there
is
some
error
&&
error
!=
nil)
{
*error
=
[NSError
errorWithDomain:@"MyError"
code:依
userInfo:nil];
}

}];
}
隐式创建autorelease
pool面代码实际类似于:
-
(void)loopThroughDictionary:(NSDictionary
*)dict
error:(NSError
**)error
{
[dict
:^(id
key,
id
obj,
BOOL
*stop){
@autoreleasepool
//
隐式创建
{
if
(there
is
some
error
&&
error
!=
nil)
{
*error
=
[NSError
errorWithDomain:@"MyError"
code:依
userInfo:nil];
}

}
}];
//
*error
已经dict做枚举遍历创建autorelease
pool释放掉
:(
}
能够使用*error我需要strong型临引用dict枚举Block用临引用保证引用指向象dict枚举Block释放确式:
-
(void)loopThroughDictionary:(NSDictionary
*)dict
error:(NSError
**)error
{
__block
NSError*
tempError;
//
加__block保证Block内修改
[dict
:^(id
key,
id
obj,
BOOL
*stop)
{
if
(there
is
some
error)
{
*tempError
=
[NSError
errorWithDomain:@"MyError"
code:依
userInfo:nil];
}

}]
if
(error
!=
nil)
{
*error
=
tempError;
}

❺ 使用arc4random()的c语言程序编译时出现unresolved external symb

这是连接错,这个 arc4random()肯定是声明了,

如果 arc4random()是一个函数的话,可能是你没有把.c或者.cpp文件加入工程,

如果是一个全局变量,可能是你没有在.c或者.cpp文件中定义这个变量.

阅读全文

与Arc运行时编译时相关的资料

热点内容
卡尔曼滤波算法书籍 浏览:768
安卓手机怎么用爱思助手传文件进苹果手机上 浏览:843
安卓怎么下载60秒生存 浏览:802
外向式文件夹 浏览:235
dospdf 浏览:430
怎么修改腾讯云服务器ip 浏览:387
pdftoeps 浏览:492
为什么鸿蒙那么像安卓 浏览:735
安卓手机怎么拍自媒体视频 浏览:185
单片机各个中断的初始化 浏览:723
python怎么集合元素 浏览:480
python逐条解读 浏览:832
基于单片机的湿度控制 浏览:498
ios如何使用安卓的帐号 浏览:882
程序员公园采访 浏览:811
程序员实战教程要多长时间 浏览:974
企业数据加密技巧 浏览:134
租云服务器开发 浏览:813
程序员告白妈妈不同意 浏览:335
攻城掠地怎么查看服务器 浏览:600