小编Kaz*_*oto的帖子

核心数据属性更改为nil(ARC相关?)

我有一些核心数据功能正常工作,直到最近(看似无关)一些更改.现在我遇到的问题是属于特定NSManagedObject子类实例的所有属性突然返回nil.

假设我的NSManagedObject子类名为Foo,它只有一个名为value的属性.一旦我意识到价值以某种方式变为零,我去设置以下类别来监控价值变化.

@implementation Foo (Debug)

- (void)setValue:(NSDate *)value
{
    [self willChangeValueForKey:@"value"];
    [self setPrimitiveValue:value forKey:@"value"];     
    [self didChangeValueForKey:@"value"];
}

- (NSDate *)value
{
    [self willAccessValueForKey:@"value"];
    NSDate *value = [self primitiveValueForKey:@"value"];
    [self didAccessValueForKey:@"value"];

    return value;
}

@end
Run Code Online (Sandbox Code Playgroud)

setValue:为我的对象调用,传入的参数是一个非零NSDate.然后检索该值(在另一种方法中).正确检索指定的相同值.

但是,当另一个方法尝试读取值时,将调用值访问器并由primitiveValueForKey:返回nil值.

在两个读取之间,setValue:未被调用,并且Foo对象本身仍然有效(非零).事实上,在任何Core Data对象或整个上下文的两次读取之间不会执行其他Core Data操作.

我们在项目中使用ARC.有可能ARC在某种程度上搞乱了我的核心数据变量并取消分配它们吗?如果是这样,有人有任何调试ARC解除分配的建议吗?或者更好的是,有没有人知道确保ARC不释放我的变量的方法.

这甚至可能与ARC无关,但是对于发生的事情我有点不知所措.任何建议将非常感谢.

core-data objective-c automatic-ref-counting

8
推荐指数
1
解决办法
2456
查看次数

如何将应用程序迁移到iOS 5?(或打开ARC)

我有一个应用程序,我正在努力,我刚开始使用iOS 5.我想开始使用自动引用计数,但我不知道我需要采取什么步骤才能迁移到iOS 5或至少打开ARC.

objective-c automatic-ref-counting

8
推荐指数
1
解决办法
1124
查看次数

在使用ARC的Objective-C中,我们通常只需要将非原子属性指定为属性属性吗?

奇怪的是,在Big Nerd Ranch iOS 5书(第73页)和编程iOS 5书(O'Reilly,第314页)(updadte:甚至Kochan的Objective-C第四版),在ARC的背景下,他们比如属性的默认属性是assign......但是Apple的文档说默认是strong.

我还尝试了一个简单的程序,如果我没有指定strong,程序工作正常,如果我指定strong,它的工作方式相同,而当assign使用时,编译器显示警告,所以看起来默认是确实如此strong.

因此,如果大多数时间,我们想要

@property (nonatomic, readwrite, strong) NSMutableArray *foo;
Run Code Online (Sandbox Code Playgroud)

然后我们就可以写了

@property (nonatomic) NSMutableArray *foo;
Run Code Online (Sandbox Code Playgroud)

因为其他两个(readwritestrong)是默认的?

objective-c automatic-ref-counting

8
推荐指数
1
解决办法
1190
查看次数

class方法,其中self在块中使用

我有一个dispatch_once用于创建静态对象的类方法.在dispatch_once我使用的块内,[self class]并想知道我是否需要使用弱引用self来避免保留周期?

+ (NSArray *)accountNames{
    static NSArray *names = nil;
    static dispatch_once_t predicate;
    dispatch_once(&predicate, ^{
        names = [[[self class] accounts] allKeys];
        names = [names sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)];
    });
    return names;
}
Run Code Online (Sandbox Code Playgroud)

如果我使用弱引用,self我会收到警告:

+ (NSArray *)accountNames{
    static NSArray *names = nil;
    static dispatch_once_t predicate;
    __weak TUAccount *wself = self;
    dispatch_once(&predicate, ^{
        names = [[[wself class] accounts] allKeys];
        names = [names sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)];
    });
    return names;
}
Run Code Online (Sandbox Code Playgroud)

不兼容的指针类型使用类型为'const Class'的表达式初始化'TUAccount*__ weak'

因为我收到警告,我认为self在这种情况下我不需要使用弱引用,但我想看看你们的想法.

cocoa weak-references objective-c objective-c-blocks automatic-ref-counting

7
推荐指数
1
解决办法
1322
查看次数

iPhone ARC和Facebook SDK

因为我的应用程序使用ARC,我在Facebook的SDK中遇到了各种构建错误.我尝试从编译器中删除Facebook文件以避免这种情况,但是当我删除Facebook.m文件时出现Apple Mach-O错误.如果我把它放回编译源中,我会收到ARC错误.

有人碰到这个吗?

iphone facebook automatic-ref-counting

6
推荐指数
2
解决办法
5515
查看次数

在iOS中,使用ARC,是否足以将所有ivars和属性设置为nil,并在viewDidUnload中释放上下文,图像,颜色空间?

对于iOS应用程序,使用ARC,我们通常会发布这些viewDidUnload吗?

  1. 将所有实例变量设置为 nil

  2. 将所有属性设置为 nil

  3. 使用CGContextRelease,CGImage with CGImageRelease和color space 释放任何上下文CGColorSpaceRelease(释放任何非对象)

  4. 需要没有特别关注NSMutableArrayNSSet要素:刚才设置的参考NSMutableArray中和的NSSet为零,每个元素会自动释放.

这样做会处理ARC下的大部分内存释放吗?是否还需要发布其他项目?

iphone objective-c ios automatic-ref-counting

6
推荐指数
2
解决办法
1641
查看次数

Objective-C SCNetworkReachabilityContext ARC转换

在将应用转换为使用自动引用计数时,我遇到了以下错误:

SCNetworkReachabilityContext context = {0, self, NULL, NULL, NULL};
Run Code Online (Sandbox Code Playgroud)

使用ARC不允许将Objective-C指针隐式转换为'void*'

这可以修复编译器错误,但会发出警告:

SCNetworkReachabilityContext context = {0, objc_unretainedPointer(self), NULL, NULL, NULL};
Run Code Online (Sandbox Code Playgroud)

如何摆脱这种警告?

使用类型'objc_objectptr_t'(又名'const void*')的表达式初始化'void*'会丢弃限定符

iphone objective-c ipad automatic-ref-counting

5
推荐指数
1
解决办法
2051
查看次数

ARC下的id数组成员实例

我想写这样的东西:

@interface Foo{

    __strong id idArray[]; 

}
@end
Run Code Online (Sandbox Code Playgroud)

但是编译器抱怨它:

Field has incomplete type '__strong id []'.
Run Code Online (Sandbox Code Playgroud)

如何在ARC下创建id数组成员实例?我如何初始化该数组?使用malloc?新[]?

我不想使用NSArray,因为我正在将一个大型库转换为ARC,这将导致很多工作.

objective-c automatic-ref-counting

5
推荐指数
1
解决办法
2849
查看次数

NSMutableArray漏洞内的块(ARC)

我有一些内部块的操作.此操作,只更新UIImage如下:

^(UIImage *image) {
            self.myImage = image;
        }];
Run Code Online (Sandbox Code Playgroud)

我的图像是通过访问互联网计算的NSURLConnection.当我从互联网上收到图像时,我称之为内部的那个块NSMutableArray.到现在为止还挺好.我的问题是,当我有多个具有相同URL的图像,而不是进行多次调用时,我只是NSMutableArray在处理连接的类内部添加一个新块.这样,我进行一次调用,并更新共享URL的多个图像.一切正常,问题是我在泄漏块.我将这样的块添加到NSMutableArray:

 if( (self = [super init]) ) 
    {
        self.connectionURL=url;
        self.arrayOfBlocks=[NSMutableArray array];
        [arrayOfBlocks addObject:completion];
    }
    return self;
Run Code Online (Sandbox Code Playgroud)

这是初始化连接类的时候.这是我需要添加一个新块NSMutableArray(我只添加它,就是这样):

[arrayOfBlocks addObject:completion];
Run Code Online (Sandbox Code Playgroud)

这是当我最终收到回调并开始执行块时:

 for (MyBlock blockToExecute in arrayOfBlocks)
    {
        blockToExecute([UIImage imageWithData:data]);
    }
Run Code Online (Sandbox Code Playgroud)

问题是,这是以某种方式泄漏.我无法抵消使用版本或自动发布,因为我在ARC环境中.那么什么可以解决方案呢?


在此输入图像描述

nsurlconnection ios objective-c-blocks automatic-ref-counting

5
推荐指数
1
解决办法
1690
查看次数

ARC,非ARC和继承

除了通过第三方代码强行进入项目之外,我还没有使用过ARC.我已经阅读了所有ARC文档,但没有看到这个问题的答案:

如果我有一个在编译的模块中定义的类,-fobjc-arc我可以在一个未启用ARC的模块中从中派生一个新类吗?

在我看来,只要派生类不试图触及根类中的任何ivars,它应该可以正常工作.在我看来,即使有一个dealloc方法调用[super dealloc]在派生类中也没问题.

那么,另一种方式呢?我可以从非ARC类派生一个启用ARC的类吗?应该也可以正常工作,对吧?

加分点:在混合使用ARC和非ARC代码时,有什么问题我应该让自己知道吗?

objective-c ios automatic-ref-counting

5
推荐指数
1
解决办法
1296
查看次数