我尝试使用Stig的JSON库发出HTTP请求并解析JSON.我收到此错误'autorelease'不可用:当我使用此代码时,在自动引用计数模式下不可用
NSURLRequest *request2;
request2 = [NSURLRequest requestWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"http://sandbox.CompanyName.com/api/%@/users/%@/user_badges?url=CompanyName.map2.com&amount=999999999999",[information stringForKey:@"apiKey"] , [information stringForKey:@"userID"]]]];
NSURLConnection *connection2;
connection2 = [[NSURLConnection alloc] initWithRequest:request2 delegate:self startImmediately:YES];
NSURLResponse *resp2;
NSData *cData2 = [NSURLConnection sendSynchronousRequest:request2 returningResponse:&resp2 error:nil];
NSString *cDataString2 = [[NSString alloc] initWithData:cData2 encoding:NSUTF8StringEncoding];
NSLog(@"getUsersBadges called");
NSError *error4;
SBJSON *json4 = [[SBJSON new] autorelease];
// NSArray *luckyNumbers = [json objectWithString:responseString error:&error];
NSDictionary *luckyNumbers4 = [json4 objectWithString:cDataString2 error:&error4];
[cDataString2 release];
Run Code Online (Sandbox Code Playgroud)
UPDATE
对于任何感兴趣的人,这是正确的代码:NSURLRequest*request2; request2 = [NSURLRequest requestWithURL:[NSURL URLWithString:[NSString stringWithFormat:@" http://sandbox.CompanyName.com/api/%@/users/%@/user_badges?url=CompanyName.map2.com&ount =999999999999 ",[ information stringForKey:@"apiKey"],[information stringForKey:@"userID"]]]];
NSURLConnection *connection2;
connection2 …Run Code Online (Sandbox Code Playgroud) 我已将我的项目转换为iOS 5并启用了ARC.现在我需要将核心情节与项目整合起来.当我尝试实例化Core Plot中包含的样本控制器时,我得到大约20个错误,如下所示:
当前部署目标不支持自动__weak引用
我fno-objc-arc在构建设置中明确地说过了控制器名称旁边的内容.
在启用ARC的情况下运行核心图还需要什么?
谢谢!
如果我有这个代码,
+ (MyCustomClass*) myCustomClass
{
return [[[MyCustomClass alloc] init] autorelease];
}
Run Code Online (Sandbox Code Playgroud)
此代码保证返回的对象是自动释放的.ARC的相当于什么?
我使用Xcode项目向导创建了一个支持ARC的项目.与没有ARC支持的程序相比,我没有发现任何差异.如果我的程序支持ARC,是否有任何提示可以告诉我?
我正在使用XCode 4.2.1 Build 4D502
我正在开发一个基于ARC的项目.我从未参与过基于Non ARC的项目.最近我
在我启用ARC的项目中遇到了一个僵尸.据我所知,那里不会有记忆
在ARC中泄漏,因为对象将自动解除分配.但我遇到了一个僵尸
说"消息传递给一个解除分配的实例".我的困惑是内存泄漏等价物
去一个僵尸.如果是这种情况,那么内存泄漏也会发生在ARC中吗?有帮助吗?
我最近遇到了一个Apple文档,它显示了一个块的以下属性声明:
@interface XYZObject : NSObject
@property (copy) void (^blockProperty)(void);
@end
Run Code Online (Sandbox Code Playgroud)
此外,本文还指出:
注意:您应该将copy指定为属性属性,因为需要复制块以跟踪其在原始范围之外的捕获状态.在使用自动引用计数时,您不必担心这一点,因为它会自动发生,但属性属性的最佳做法是显示结果行为.有关更多信息,请参阅块编程主题.
我还阅读了建议的块编程主题,但没有找到任何相关的内容.
我仍然很好奇为什么将块属性定义为"复制"是最佳实践.如果您有一个好的答案,请尝试区分ARC和MRC差异(如果有的话).
谢谢
我正在使用Box2D(C++)并创建一个Objective-C对象并将其分配给Box2D正文的userData属性,该属性属于类型void*.
现在在某些情况下,它void* userData可能是该ObjC对象的唯一活动引用.因此,因为我(__bridge void*)在作业中使用过,所以ARC正在放手.这是我需要解决的问题.
我一直在思考防止这种情况发生的选择吗?我阅读了Clang的ARC文档,特别是关于桥梁铸造的部分(以及关于SO的Q&A)以及对他们认为"形成不良"的各种桥梁铸造结构的点头.
不过,我的第一个想法是(__bridge_retained void*)在初始分配给userData时使用.但这让我想知道如何平衡保留?我显然无法向对象发送释放.
那么我必须要CFRelease()对象吗?还是需要CFBridgingRelease()?或者在这里都是非法的?
是否(__bridge_transfer void*)从userData一个临时id类型转换为足够的,也许在之后将userData设置为NULL?这是一个好主意吗?
我所知道的替代办法是保留独立NSArray/ NSDictionary为userData对象,让他们在与Box2D的身体的寿命同步,添加和同步与他们的Box2D的身体移除它们.
但这感觉就像矫枉过正,因为在这里我知道我在做什么,我知道+1只要Box2D主体处于活动状态-1就需要对象,并且当Box2D主体被移除时我需要对象.另外我知道只有两种方法可以添加和删除Box2D主体,并且userData在我的框架中甚至无法直接访问,因为所有Box2D对象都隐藏在Objective-C接口/包装器后面.
暂时搁置"不良形式",你会建议我在这种情况下做什么?
我对ARC如何工作有点困惑,我知道有自动引用计数但是这个功能甚至可以用于分配原始实例变量(不使用属性).
例如,如果我有一个实例变量arr:
@interface TestClass : NSObject {
NSArray *arr;
}
Run Code Online (Sandbox Code Playgroud)
现在如果在方法内部我使用自动释放分配它NSArray:
- (IBAction)test {
arr = [NSArray arrayWithObject:@"TEST"];
}
Run Code Online (Sandbox Code Playgroud)
这个阵列会发生什么?是否只是神奇地保留它,直到arr被重新分配给其他东西?
现在,如果我做了类似的事情:
self.arr = [NSArray arrayWithObject:@"TEST"];
Run Code Online (Sandbox Code Playgroud)
如果它强而弱,会发生什么?
我刚刚更新了一个项目,使用ARC和Xcode 4.2内置转换工具.不幸的是,有一个奇怪的错误出现,我不明白,也没有找到任何关于.我有一个带有属性声明的文档类:
@property (weak) IBOutlet WebView *webView;
Run Code Online (Sandbox Code Playgroud)
在实现文件中,我有一个@synthesize语句:
@synthesize webView=_webView;
Run Code Online (Sandbox Code Playgroud)
当我尝试编译它时,它会失败并告诉我:
错误:仅在ARC或GC模式下允许'弱'属性的@synthesize
当然,该项目被标记为使用ARC进行编译.我非常感谢任何帮助,以了解我做错了什么以及为什么.
编辑:昨天晚了.所以这是一个更完整的编译日志:
[...] -fobjc-arc -Wno-trigraphs -fpascal-strings -O0 -Wmissing-prototypes -Wreturn-type -Wharentheses -Wswitch -Wno-unused-parameter -Wunused-variable -Wunused-value -Whorten-64- to-32 -DDEBUG = 1 -isysroot /Developer/SDKs/MacOSX10.7.sdk -fasm-blocks -mmacosx-version-min = 10.7 -gdwarf-2 -Wno-sign-conversion"-DIBOutlet = attribute((iboutlet) )""-DIBOutletCollection(ClassName)= attribute((iboutletcollection(ClassName)))"" - DIBAction = void)属性((ibaction)" - iquote [...]/Build/Intermediates/[...].build /Debug/[...].build/[...]-generated-files.hmap -I [...]/Build/Intermediates/[...].build/Debug/[...]. build /[...]- own-target-headers.hmap -I [...]/Build/Intermediates/[...] .build/Debug/[...].build/[...] -all-target-headers.hmap -iquote [...]/Build/Intermediates/[...] .build/Debug/[...].build /[...]- project-headers.hmap - 我[/]/Build/Products/Debug/include -I [...]/Build/Intermediates/[...].build/Debug/[...].build/DerivedSources/x86_64 -I [ ...] /编译/中间体/ [...].构建/调试/ [...].构建/ DERI …
我有一个MKMapView,我正在添加这样的注释:
for (NSDictionary *tmp in response)
{
NSDictionary *places = [tmp objectForKey:@"place"];
NSDictionary *location = [places objectForKey:@"location"];
NSLog(@"long: %@ Lat:%@",[location objectForKey:@"longitude"], [location objectForKey:@"latitude"]);
float longitude = [[location objectForKey:@"longitude"] floatValue];
float latitude = [[location objectForKey:@"latitude"] floatValue];
CLLocationCoordinate2D locationco = {latitude,longitude};
NSString *titleString = [tmp objectForKey:@"name"];
Place *pin = [[Place alloc] init];
pin.coordinate = locationco;
pin.title = titleString;
pin.subtitle = @"A Location";
//NSArray *annots = [[NSArray alloc] initWithObjects:pin, nil];
//[map addAnnotations:annots];
[map addAnnotation:pin];
[[map viewForAnnotation:pin] setCanShowCallout:YES];
}
Run Code Online (Sandbox Code Playgroud)
本MKAnnotation的显示在地图上罚款,我可以选择它们,但是没有出现标注泡沫.我知道他们正在被选中 …
objective-c ×7
ios ×5
ios5 ×2
iphone ×2
xcode ×2
autorelease ×1
casting ×1
clang ×1
core-plot ×1
iphone-4 ×1
memory-leaks ×1
mkmapview ×1
xcode4.2 ×1