标签: automatic-ref-counting

ARC的强大属性是否需要self.iVar?

  1. 如果我宣布一个强大的财产,如下:

    @property (strong, nonatomic) UIView *iVar;
    
    Run Code Online (Sandbox Code Playgroud)

    当我设置它,它的问题,如果我做的iVar = ...还是self.iVar = ...?似乎用ARC,他们做同样的事情.

  2. 如果我只声明实例变量(不是@property),例如,BOOL selected那是否意味着它被推断为__unsafe_unretained(因为没有指定它强的属性),或者我必须明确指定它吗?

在回答ARC时,我似乎已经回答了我自己的问题:如何释放静态变量?,但我仍然对上述问题略感困惑.

objective-c llvm automatic-ref-counting

17
推荐指数
1
解决办法
2200
查看次数

ARC中的虚假va_list

我需要在iOS应用程序中创建一个假va_list的传递给NSString initWithFormat:arguments:函数,这是我的代码:

NSArray *fixedArguments = [[NSArray alloc] initWithArray:arguments]; 

NSRange range = NSMakeRange(0, [fixedArguments count]);

va_list fakeArgList = (va_list)malloc(sizeof(NSString *) * [fixedArguments count]);

__unsafe_unretained id *ptr = (__unsafe_unretained id *)fakeArgList;

[fixedArguments getObjects:ptr range:range];

content = [[NSString alloc] initWithFormat:outputFormat
                                            arguments:(va_list)fakeArgList];
free(fakeArgList);
Run Code Online (Sandbox Code Playgroud)

编译器在转换线上抱怨此消息:

error: cast of a non-Objective-C pointer type 'va_list' (aka 'char *') to '__unsafe_unretained id *' is disallowed with ARC
Run Code Online (Sandbox Code Playgroud)

getObjects:range:功能定义如下:

- (void)getObjects:(id __unsafe_unretained [])objects range:(NSRange)range;
Run Code Online (Sandbox Code Playgroud)

我已经尝试了一切,但仍然无法摆脱这个错误......

是否有va_list启用ARC 创建假的解决方案?我究竟做错了什么?

objective-c variadic-functions ios automatic-ref-counting

17
推荐指数
1
解决办法
6046
查看次数

在arc下使用objc_getClassList

有没有人设法在arc下使用objc_getClassList,而不是为有问题的文件关闭弧线?

基本问题是其中一个参数是一个C类的Class指针.

iphone objective-c-runtime ios automatic-ref-counting

17
推荐指数
1
解决办法
3407
查看次数

为什么这些简单方法编译方式不同?

我有点困惑为什么clang为以下两种方法发出不同的代码:

@interface ClassA : NSObject
@end

@implementation ClassA
+ (ClassA*)giveMeAnObject1 {
    return [[ClassA alloc] init];
}
+ (id)giveMeAnObject2 {
    return [[ClassA alloc] init];
}
@end
Run Code Online (Sandbox Code Playgroud)

如果我们查看发出的ARMv7,那么我们会在O3启用ARC的情况下看到这个:

        .align  2
        .code   16
        .thumb_func     "+[ClassA giveMeAnObject1]"
"+[ClassA giveMeAnObject1]":
        push    {r7, lr}
        movw    r1, :lower16:(L_OBJC_SELECTOR_REFERENCES_-(LPC0_0+4))
        mov     r7, sp
        movt    r1, :upper16:(L_OBJC_SELECTOR_REFERENCES_-(LPC0_0+4))
        movw    r0, :lower16:(L_OBJC_CLASSLIST_REFERENCES_$_-(LPC0_1+4))
        movt    r0, :upper16:(L_OBJC_CLASSLIST_REFERENCES_$_-(LPC0_1+4))
LPC0_0:
        add     r1, pc
LPC0_1:
        add     r0, pc
        ldr     r1, [r1]
        ldr     r0, [r0]
        blx     _objc_msgSend
        movw    r1, :lower16:(L_OBJC_SELECTOR_REFERENCES_2-(LPC0_2+4))
        movt    r1, :upper16:(L_OBJC_SELECTOR_REFERENCES_2-(LPC0_2+4))
LPC0_2:
        add     r1, …
Run Code Online (Sandbox Code Playgroud)

objective-c clang automatic-ref-counting

17
推荐指数
1
解决办法
751
查看次数

@autoreleasepool {}在退回/退出时会消耗吗?

考虑这个例子:

- (void)doSomething {
   @autoreleasepool {
      if (someCondition) {

         /* ... allocate some autoreleased objects here ... */

         return;
      }
   }
}
Run Code Online (Sandbox Code Playgroud)

以前,使用手动NSAutoreleasePools,如果我们提前返回,我们需要打电话[pool drain],否则池不会被耗尽.随着新的@autoreleasepool {}

cocoa nsautoreleasepool automatic-ref-counting llvm-3.0

17
推荐指数
1
解决办法
2542
查看次数

ARC:"指向非const类型'id'没有明确所有权的指针"

我正在升级iOS 4项目,将其与ARC一起用于sdk5.所以我想使用自动重构方法将代码转换为使用ARC.不幸的是它不起作用.我收到很多错误..

for(id* child in childObjectArray){
    [child removeParentGroupReferences];
}
Run Code Online (Sandbox Code Playgroud)

这给了我以下错误输出:

指向非const类型"id"的指针,没有明确的所有权

对此有何帮助?我需要改变什么?谢谢你的帮助..

memory-management ios automatic-ref-counting

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

iOS和ARC:如何在异步操作期间保留self?

这是我第一次摆弄iOS5和ARC.到目前为止,这么好,它有效,但我遇到了某种问题.

我有一个自定义UIStoryboardSegue,我使用Facebook Connect(或其他服务)将用户登录到我的应用程序.简而言之,它应该做到以下几点:

  1. 用户点击按钮
  2. 按钮点燃了Segue
  3. segue启动异步登录,但不会立即推送视图控制器
  4. 如果且仅当登录成功时,segue才会推送视图控制器

相反,是登录开始,但是在有机会完成之前,ARC会立即释放segue.

我想到了一个快速的黑客来阻止这个:

@interface BSLoginSegue() {
    __strong BSLoginSegue *_retained_self;
}
@end

// Stuff...
// Other stuff...

- (void) perform {
    login();
    _retained_self = self;
}

- (void) loginServiceDidSucceed:(BSLoginService *)svc {
    ...
    _retained_self = nil;
}
Run Code Online (Sandbox Code Playgroud)

问题是,它真的一个黑客,所以我想知道是否还有其他更优雅的方式我可以做同样的事情?

objective-c ios automatic-ref-counting

17
推荐指数
2
解决办法
4278
查看次数

如何强制xcode在特定文件上使用ARC?

我的项目包含XMPPFramework,其中包含必须与ARC一起使用的文件.但是我的项目是Non ARC,由于链接到它的某些其他库而无法转换.

如何强制编译器仅在某个类上使用ARC?

xcode xmpp build compiler-flags automatic-ref-counting

17
推荐指数
1
解决办法
8062
查看次数

iOS:垃圾收集

我知道iOS自动引用计数,它是基于编译器的功能.但是,我一直在浏览许多网站,并对iOS程序开发中是否存在垃圾收集感到困惑?我知道,ARC和GC彼此不同.一些链接说,GC可用于iOS,有些链接表示GC仅适用于Mac OS X开发.但是,我无法断定在iOS开发中是否存在GC?请指导我正确的路径或链接,以便我能理解它并尝试编程.

谢谢!

objective-c ios automatic-ref-counting

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

在ARC中我们需要发送removeObserver:explicit吗?

我们是否必须removeObserver:明确发送已作为观察者添加到NSNotificationCenter之前的对象?

我有点困惑,无法找到确切的答案.

请详细提供我,包括为什么我们需要显式删除Observer,以及为什么编译器没有隐式地将它放在类/应用程序中?

cocoa objective-c nsnotificationcenter automatic-ref-counting

16
推荐指数
3
解决办法
4257
查看次数