标签: automatic-ref-counting

ld:在iOS 4.3上复制符号_objc_retainedObject,但在iOS 5.0上没有


一些背景 - 我使用Diney的指南构建了一个自定义框架,网址http://db-in.com/blog/2011/07/universal-framework-iphone-ios-2-0/

它是为armv6/armv7构建的,它是一个基于ARC的框架,编译时的解复目标为4.3.

当我把结果框架放在一个5.0项目中时,它工作得很好,但当我把它放在一个4.3项目(ARC或非弧形,无所谓)时,我得到以下我无法理解的...

我也尝试手动添加libarclite.a,但它没有改变任何东西.

ld:/Users/freak4pc/Project/MyFramework.framework/MyFramework和/Developer/Platforms/iPhoneOS.platform/Developer/usr/lib/arc/libarclite_iphoneos.a(arclite.o)中的重复符号_objc_retainedObject,用于架构armv7 Command/Developer /Platforms/iPhoneOS.platform/Developer/usr/bin/clang失败,退出代码为1

非常感谢任何帮助.
谢谢
Shai

xcode duplicate-symbol armv7 ios automatic-ref-counting

12
推荐指数
1
解决办法
4321
查看次数

cocos2d支持ARC吗?

我正在使用Xcode 4.2并为iphone构建游戏(来自iOS 3.0 - 5.0).cocos2d支持ARC吗?转换以前版本中编写的代码需要进行哪些修改?

如果我对变量使用强和弱关键字并将编译器设置为LLVM GCC 4.2,结果会是什么?是否有必要将编译器更改为3.0以支持ARC?

objective-c cocos2d-iphone automatic-ref-counting

12
推荐指数
1
解决办法
3863
查看次数

如何实现ARC的归零弱指针行为?

我在学习ARC.而现在关于弱指针归零.好的我了解所有功能.弱引用的语义与GC系统的弱引用相同,但是你知道,Objective-C不使用GC(特殊情况除外),所以我无法理解它是如何工作的.

我是一个有点复杂的人,所以我需要知道底层实现原则才能接受要使用的功能.但问题是很难找到描述归零弱指针原理的文档:(

IMO,实现这项工作的唯一方法是跟踪并保持所有指针在运行时引用自身,并nil在其引用计数变为时将它们全部设置0.但这看起来太沉重和愚蠢.我相信在实际的ARC实现中使用了更好的解决方案.

你能帮我找到文件吗?或直接描述会更棒!

objective-c automatic-ref-counting

12
推荐指数
1
解决办法
3628
查看次数

使用ARC在其自己的完成块中引用NSOperation对象

我将一些NSOperation代码转换为ARC时遇到了困难.我的操作对象使用完成块,该完成块又包含一个GCD块,用于更新主线程上的UI.因为我从自己的完成块中引用了我的操作对象,所以我使用__weak指针来避免内存泄漏.但是,在我的代码运行时,指针已经设置为nil.

我把它缩小到这个代码示例.谁知道我哪里出错了,以及正确的方法来实现这一目标?

NSOperationSubclass *operation = [[NSOperationSubclass alloc] init];
__weak NSOperationSubclass *weakOperation = operation;

[operation setCompletionBlock:^{
    dispatch_async( dispatch_get_main_queue(), ^{

        // fails the check
        NSAssert( weakOperation != nil, @"pointer is nil" );

        ...
    });
}];
Run Code Online (Sandbox Code Playgroud)

objective-c nsoperation grand-central-dispatch objective-c-blocks automatic-ref-counting

12
推荐指数
3
解决办法
5702
查看次数

保留核心基金会财产

(Xcode 4.2,iOS 5,ARC)

我有一些Core Foundation(/ Graphics)对象的属性应该取得对象的所有权.现在在这些Apple文档中我发现了这个:

在OS X v10.6及更高版本中,您可以使用__attribute__关键字指定应将Core Foundation属性视为用于内存管理的Objective-C对象: @property(retain) __attribute__((NSObject)) CFDictionaryRef myDictionary;

不幸的是我找不到任何详细说明.我正在使用这个:

@property (nonatomic, strong) __attribute__((NSObject)) CGImageRef loupeImage;

它看起来像我期望的那样工作.它保留了设置属性的对象,并在将属性设置为nil时将其释放.

现在我的问题是,我还需要在dealloc中将这些属性显式设置为nil吗?

objective-c core-foundation ios automatic-ref-counting

12
推荐指数
1
解决办法
2607
查看次数

ARC内存泄漏

我在配置为使用ARC的项目中遇到与NSMutableArray链接的内存泄漏,我认为应该为您处理这些事情.

以下代码触发NSNumbers的泄漏:

NSMutableArray *myArray = [[NSMutableArray alloc] init];

NSNumber  *myNumber = [NSNumber numberWithFloat:10];

[myArray addObject:myNumber];
Run Code Online (Sandbox Code Playgroud)

运行最后一行在调试器中给出以下内容:

objc [1106]:类__NSCFNumber的对象0x765ffe0自动释放,没有池到位 - 只是泄漏 - 在objc_autoreleaseNoPool()中断以调试

除此之外,对象似乎正确地添加到可变数组中,

我做错了什么吗?

注意:项目中有一个类无法使用ARC,因此我使用编译器标志-fno-objc-arc将其从ARC中排除.但是,泄漏发生在使用ARC的其他类中.不确定这是否相关.

非常感谢您的帮助.

xcode ios automatic-ref-counting

12
推荐指数
1
解决办法
1万
查看次数

为什么消息发送会导致ARC中的保留周期警告,但属性集不会?

[self.foo setBlock:^{
    [self doSomething]; // causes warning
}];
Run Code Online (Sandbox Code Playgroud)

[self.foo setBlock:^{
    self.bar = baz;     // does not cause warning
}];
Run Code Online (Sandbox Code Playgroud)

警告是" self在这个区块中强势捕获可能会导致保留周期."

两者都不会导致强烈的参考?

memory memory-management objective-c ios automatic-ref-counting

12
推荐指数
1
解决办法
207
查看次数

使用ARC将CFErrorRef转换为NSError(或相反)

我曾经像这样将NSError强制转换为CFErrorRef并在SMJobBless中使用它

NSError *error
BOOL removed = SMJobRemove(kSMDomainSystemLaunchd,
                               (CFStringRef) daemonBundleID,
                               auth,
                               true,
                               (CFErrorRef*) &error);
if (!removed) {
        NSLog(@"Failed to remove existing PacketTool");
        [NSApp presentError: error];
    }
Run Code Online (Sandbox Code Playgroud)

由于我在ARC中遇到错误,"ARC禁止使用指向'CFErrorRef'的Obj-C指针的间接指针",我改变并决定做相反的事情

CFErrorRef *cfError = nil;
BOOL blessed = SMJobBless(kSMDomainSystemLaunchd, (__bridge CFStringRef)daemonBundleID,
                          auth,
                          cfError);
if (!blessed) {
    NSError *error = (__bridge NSError *)cfError;
    NSLog(@"Failed to bless PacketTool: %@", error);
    [NSApp presentError: error];
    return FALSE;
}
Run Code Online (Sandbox Code Playgroud)

现在我有一个"不兼容的类型转换'CFErrorRef'到NSError*"与__bridge强制转换

我能做什么?

更新:感谢Greg,正确的代码现在是:

CFErrorRef cfError = nil;
BOOL blessed = SMJobBless(kSMDomainSystemLaunchd,
                          (__bridge CFStringRef) daemonBundleID,
                          auth,
                          &cfError);
if (!blessed) {
    NSError *error …
Run Code Online (Sandbox Code Playgroud)

cocoa objective-c automatic-ref-counting

12
推荐指数
2
解决办法
5284
查看次数

Swift中的自定义类集群

这是一种相对常见的设计模式:

/sf/answers/1191052901/

它允许您从init调用中返回子类.

我试图找出使用Swift实现相同功能的最佳方法.

我知道有很好的方法可以用Swift实现同样的功能.但是,我的课程将由现有的Obj-C库初始化,我无法控制.因此它需要以这种方式工作并且可以从Obj-C调用.

任何指针都将非常感激.

design-patterns class-cluster ios automatic-ref-counting swift

12
推荐指数
1
解决办法
3925
查看次数

NSPointerArray奇怪的压缩

NSPointerArray一些NSObject已被释放的弱者.在打电话给compact我看之前是:

(lldb) po [currentArray count]
1
(lldb) po [currentArray pointerAtIndex:0]
<nil>
(lldb) po [currentArray allObjects]
<__NSArrayM 0x16f04f00>(

)
Run Code Online (Sandbox Code Playgroud)

这是有道理的,但真正奇怪的是,当我调用compact该数组时,我看到了相同的值!计数仍然返回1并且pointerAtIndex:0nil.

为什么没有删除nil?

编辑

这是完整的代码(是的,它是XCTesting框架):

- (void)testCompaction {
    __weak id testingPointer = nil;

    NSPointerArray *weakArray = [NSPointerArray weakObjectsPointerArray];

    @autoreleasepool {

        NSObject *someObj = [[NSObject alloc] init];

        testingPointer = someObj;

        [weakArray addPointer:(__bridge void*)testingPointer];

        NSLog(@"before compaction inside autorelease: testingPointer = %@ count = %d, allObjects = %@, pointerAtIndex:0 = %@, pointerAtIndex:0 class = …
Run Code Online (Sandbox Code Playgroud)

objective-c automatic-ref-counting nspointerarray

12
推荐指数
2
解决办法
1129
查看次数