标签: automatic-ref-counting

ASIHTTPRequest/ASIFormDataRequest - 在ARC下的块内引用请求对象

此问题非常相似,我正在尝试将使用ASIHTTPRequest&的项目转换ASIFormDataRequest为ARC.

在我的视图控制器类中,我经常request在完成块中引用和使用对象的属性(查看响应代码,响应数据等):

__block  ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:[NSURL URLWithString:SOME_URL]];    
[request setCompletionBlock:^{   

    if([request responseStatusCode] == 200) ....etc
Run Code Online (Sandbox Code Playgroud)

转换为ARC时,我收到警告:

在此块中强烈捕获"请求"可能会导致保留周期

这样做的正确方法是什么?

另一个SO用户在前一个帖子中指出,简单添加__weak可能会导致请求在块完成之前被释放,我认为这是真的.

如何在ARC下的完成/故障块中正确引用这些属性?

iphone objective-c asihttprequest ios automatic-ref-counting

21
推荐指数
1
解决办法
4914
查看次数

如何为整个文件组/文件夹禁用ARC?

我知道您可以设置编译器标志-fno-objc-arc以禁用XCODE中编译源中每个文件的自动引用计数(ARC),但是如何在不必每次执行每个文件的情况下对整个文件组执行此操作?

我问的原因是我在我的应用程序中添加了一个大型库,我需要-fno-objc-arc为100多个文件设置编译器标志.

iphone xcode objective-c ios automatic-ref-counting

21
推荐指数
1
解决办法
5382
查看次数

使用弧保释对象的init?

如何避免使用ARC创建对象?

我正在寻找与此相当的ARC(来自内存):

- (id)init
{
     if (( self = [super init] )) {
         if (!condition) {
             [self release];
             self = nil;
             return self;
         }
     }
     return self;
 }
Run Code Online (Sandbox Code Playgroud)

objective-c automatic-ref-counting

21
推荐指数
1
解决办法
2886
查看次数

对于CF类型,带有__attribute __((NSObject))的强大@property不会保留

更新:此问题已在Xcode 4.6中修复!

此技术现在再次按预期工作.但是,在您的代码中使用之前,请务必阅读Rob Napier优秀答案顶部的注释.

原始邮政

(ARC,Xcode 4.3.1,iOS 5.1)

我有一个CF类型(CGImage)的强大属性,我希望由ARC自动管理__attribute__((NSObject))(如在合成的setter中保留和释放,并且它在dealloc中没有),但是它不起作用:分配属性时不保留对象.

重现的最小例子:

@interface TestClass : NSObject
@property (nonatomic, strong) __attribute__((NSObject)) CFStringRef str;
@end

// ...In some function
CFStringRef str = (__bridge CFStringRef)[NSString stringWithFormat:@"%g", 2.5];
NSLog(@"%ld", CFGetRetainCount(str));
TestClass *obj = [[TestClass alloc] init];
obj.str = str;
NSLog(@"%ld", CFGetRetainCount(str));
Run Code Online (Sandbox Code Playgroud)

其中两次打印"1".

现在奇怪的是(虽然我不确定)我认为它在我更新到iOS 5.1和Xcode 4.3.1(来自iOS 5和Xcode 4.2)之前正常工作,并且它从gdb切换到lldb.未升级(或知道如何更改编译器)的人可能会确认吗?

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

21
推荐指数
1
解决办法
4766
查看次数

如何在ARC下的Objective-C上将归零弱引用变为零时得到通知?

是否有一种机制可以让对象知道归零弱引用变为零?

例如,我有一个属性

@property (nonatomic, weak) MyClass *theObject;
Run Code Online (Sandbox Code Playgroud)

当对象解除分配并且属性变为零时,我希望得到通知.但是怎么样?当对象消失时,归零弱参考系统是否使用setter将属性设置为nil?

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

21
推荐指数
2
解决办法
3408
查看次数

Cocoa阻止作为强大的指针与副本

我用块做了好几次,就像我有强烈参考的指针一样

我听说你应该使用copy,但是使用块作为指针而不是原始对象的含义是什么?

我从来没有得到编译器的抱怨,我不应该使用

@property (nonatomic, strong) MyBlock block;
Run Code Online (Sandbox Code Playgroud)

但应该使用

@property (nonatomic, copy) MyBlock block;
Run Code Online (Sandbox Code Playgroud)

据我所知,块只是一个对象,所以为什么还要复制?

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

21
推荐指数
1
解决办法
6771
查看次数

我们是否需要在ARC的UIAnimationBlocks中使用__weak self?

我们是否需要在UIAnimation块中使用__weak self,如下所示?如果我们不指定自我弱,是否会产生保留周期问题?

[UIView animateWithDuration:animationDuration 
                      delay:0 
                    options:UIViewAnimationCurveEaseInOut 
                 animations:^{
        [self doSomething];
    } completion:^(BOOL finished) {
        if (finished) {
            [self doSomething];
        }
    }];
Run Code Online (Sandbox Code Playgroud)

我也对以下场景感到困惑.有什么想法吗?请分享您的意见.

[self.navController dismissViewControllerAnimated:animated 
                                       completion:^{
                                                      [self doSomething];
                                                  }];
Run Code Online (Sandbox Code Playgroud)

我们应该在这里使用弱者吗?

ios objective-c-blocks automatic-ref-counting retain-cycle

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

为什么将正在进行释放的对象设置为弱属性会导致崩溃

Clang的Objective-C自动参考计数中,我们看到以下内容

对于__weak对象,左值更新为指向新的指针,除非新指针是当前正在进行解除分配的对象,在这种情况下,左值更新为空指针.这必须相对于对象的其他赋值,从对象读取以及新指针的最终版本以原子方式执行.

objc-weak.mm中,我们看到以下代码块weak_register_no_lock():

    if (deallocating) {
    if (crashIfDeallocating) {
        _objc_fatal("Cannot form weak reference to instance (%p) of "
                    "class %s. It is possible that this object was "
                    "over-released, or is in the process of deallocation.",
                    (void*)referent, object_getClassName((id)referent));
    } else {
        return nil;
    }
}
Run Code Online (Sandbox Code Playgroud)

我在我的UIViewController子类dealloc方法中设置了一个断点,并尝试[self allowsWeakReference]在lldb中调用,从而产生了NO值.

如果我们尝试将self设置为另一个对象的weak属性,则应用程序将根据objc-weak.mm代码崩溃.

问题是 - 为什么会发生这种情况?铿锵的规格是错的吗?这是objc实现中的一个错误吗?


这是一段简单的代码,可以重现崩溃:

//cc -fmodules -fobjc-arc -g crash.m -o crash
@import Foundation;

@interface Foo : NSObject
@end

@implementation Foo …
Run Code Online (Sandbox Code Playgroud)

weak-references objective-c clang dealloc automatic-ref-counting

21
推荐指数
1
解决办法
1627
查看次数

ARC禁止合成具有未指定所有权或存储的属性

我创建了一个@propertyUIColor,

@property (nonatomic) UIColor *color;
Run Code Online (Sandbox Code Playgroud)

然后我试着合成它:

@synthesize color = _color;
Run Code Online (Sandbox Code Playgroud)

但是我收到一个错误:

ARC禁止使用未指定的所有权或存储属性合成Objective-C对象的属性

那是什么意思?

我所要做的就是为一个UIColor改变颜色的对象创建一个属性.

memory-management compiler-errors properties objective-c automatic-ref-counting

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

斯威夫特,两个问题.1)弱变量2)@IBOutlet的bang运算符

每:

@IBOutlet weak var nameLabel: UILabel!
Run Code Online (Sandbox Code Playgroud)
  1. 每当我声明我的IBOutlets时,我只使用var而不是weak var.但我最近遇到了一些使用弱var的代码模板.他们为什么这样做?还有什么好处?

  2. 为什么在UILabel结束时会有一个爆炸操作员.我知道这是必需的,我和它一起去,但现在就问它.

提前致谢.

operators iboutlet automatic-ref-counting swift

20
推荐指数
2
解决办法
7458
查看次数