标签: automatic-ref-counting

使用ARC的原始数据类型的合成属性 - 弱或分配?

我想知道bool在启用ARC时为原始数据类型(如)编写合成属性的正确方法是什么.

我曾经在ARC之前使用它:

@property(assign) bool isOn;
Run Code Online (Sandbox Code Playgroud)

但是我的理解(也许是错误的)你不应该assign在启用ARC时使用它.我试着替换它weak但我得到错误 -

"weak"属性的属性必须是object类型.

我应该继续使用assign吗?

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

19
推荐指数
1
解决办法
6596
查看次数

NSDictionary中的弱对象?

我想在一个对象中存储一个归零的弱引用NSDictionary.这是为了引用父项NSDictionary,因此我可以在不进行搜索的情况下爬回大型结构.

我不能__weak在这里使用; 即使我的本地引用很弱,它NSDictionary也会存储对弱引用对象的强引用.而且,当然,NSDictionary不能有nil对象.

我在iOS上,而不是Mac,因此NSHashTable无法使用.我只希望一个物体变弱; 其余的应该仍然很强大.

(我将发布我的答案,所以如果没有更好的答案,我有一些标记为可接受.但我希望有人有更好的答案.)

weak-references nsdictionary ios automatic-ref-counting

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

查看ARC插入的位置保留和释放

是否有编译器选项(或其他方式)来查看ARC插入保留和释放的位置?这主要是出于好奇.我可以在反汇编代码中看到它们,但有时候很难通过.

objective-c automatic-ref-counting

19
推荐指数
2
解决办法
544
查看次数

为什么ARC抱怨iOS 6中的dispatch_queue_create和dispatch_release?

我声明了一个属性来引用GCD队列:

@property (assign) dispatch_queue_t backgroundQueue;
Run Code Online (Sandbox Code Playgroud)

在类的init方法中,我创建了一个串行队列:

backgroundQueue = dispatch_queue_create("com.company.app", DISPATCH_QUEUE_SERIAL);
Run Code Online (Sandbox Code Playgroud)

ARC抱怨:"将保留对象分配给unsafe_unretained变量;对象将在分配后释放"

我必须使用__bridge_transfer吗?

在-dealloc我发布队列:

dispatch_release(backgroundQueue);
Run Code Online (Sandbox Code Playgroud)

ARC再次提出抱怨:"ARC禁止发布'发布'的明确消息"

我发现这令人困惑,因为这是一个C函数调用,思想队列是C对象,我必须自己处理内存管理!从什么时候开始为我处理C-objects?

memory-management grand-central-dispatch ios automatic-ref-counting

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

在此区块中强烈捕获"自我"可能会导致保留周期

我需要阻止.但编译器会发出警告

"在这个区块强势捕捉'自我'可能会导致保留周期"

__weak typeof(self) weakSelf = self;
[generalInstaImage setImageWithURLRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:data[@"images"][@"low_resolution"][@"url"]]] placeholderImage:[UIImage imageNamed:@"Default"] success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image) {
    NSLog(@"success");
    [generalInstaImage setImage: image];
    [weakSelf saveImage:generalInstaImage.image withName:data[@"id"]];

    } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error) {
        NSLog(@"fail");
}];
Run Code Online (Sandbox Code Playgroud)

我尝试编写类似的例子weakSelf.generalInstaImage,但编译器生成错误而不编译.

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

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

为代表提供"强大"的参考资料是否真的好?

我有一个类从URL检索JSON并通过协议/委托模式返回数据.

MRDelegateClass.h

#import <Foundation/Foundation.h>

@protocol MRDelegateClassProtocol
@optional
- (void)dataRetrieved:(NSDictionary *)json;
- (void)dataFailed:(NSError *)error;
@end

@interface MRDelegateClass : NSObject
@property (strong) id <MRDelegateClassProtocol> delegate;

- (void)getJSONData;
@end
Run Code Online (Sandbox Code Playgroud)

请注意,我正在使用strong我的委托属性.以后更多关于......

我正在尝试编写一个"包装"类,它以基于块的格式实现getJSONData.

MRBlockWrapperClassForDelegate.h

#import <Foundation/Foundation.h>

typedef void(^SuccessBlock)(NSDictionary *json);
typedef void(^ErrorBlock)(NSError *error);

@interface MRBlockWrapperClassForDelegate : NSObject
+ (void)getJSONWithSuccess:(SuccessBlock)success orError:(ErrorBlock)error;
@end
Run Code Online (Sandbox Code Playgroud)

MRBlockWrapperClassForDelegate.m

#import "MRBlockWrapperClassForDelegate.h"
#import "MRDelegateClass.h"

@interface DelegateBlock:NSObject <MRDelegateClassProtocol>
@property (nonatomic, copy) SuccessBlock successBlock;
@property (nonatomic, copy) ErrorBlock errorBlock;
@end

@implementation DelegateBlock
- (id)initWithSuccessBlock:(SuccessBlock)aSuccessBlock andErrorBlock:(ErrorBlock)aErrorBlock {
    self = [super init];
    if (self) {
        _successBlock …
Run Code Online (Sandbox Code Playgroud)

delegates memory-management objective-c objective-c-blocks automatic-ref-counting

19
推荐指数
3
解决办法
9388
查看次数

ARC中的引用计数

我在ARC引用计数方面有点混乱你可以告诉我下面的波纹管代码的参考数量.

var vc1 = UIViewController()
var vc2 = vc1
var vc3 = vc2
weak var vc4 = vc3
Run Code Online (Sandbox Code Playgroud)

问题是:

  • 引用计数vc1?
  • 引用计数vc2?
  • 引用计数vc3?
  • 引用计数vc4?

objective-c ios automatic-ref-counting swift

19
推荐指数
1
解决办法
3065
查看次数

- [Not A Type retain]:发送给deallocated实例的消息

我已将我的应用转换为使用ARC.

在我有以下代码行之前:

NSArray *colors = [NSArray arrayWithObjects:startColor, endColor, nil];
Run Code Online (Sandbox Code Playgroud)

由于ARC不允许将非Objective-C指针类型隐式转换为'id',所以我重写了这样的行:

NSArray *colors = [NSArray arrayWithObjects:(__bridge id)startColor, (__bridge id)endColor, nil];
Run Code Online (Sandbox Code Playgroud)

一切都在模拟器上正常工作,但是在设备上,应用程序在提到的行上崩溃并显示错误消息:

-[Not A Type retain]: message sent to deallocated instance
Run Code Online (Sandbox Code Playgroud)

任何想法如何解决?

ios ios5 automatic-ref-counting

18
推荐指数
1
解决办法
5551
查看次数

ARC,值得与否?

当我从C++(和小Java)转移到Objective C(iOS)时,我很难理解iOS中的内存管理.但现在这一切看起来很自然,我知道保留,自动释放,复制和发布的东西.在阅读了ARC之后,我想知道使用ARC有什么好处,或者只是你不必担心内存管理.在转向ARC之前,我想知道如何转向ARC.

  1. XCode具有"转换为Objective C ARC"菜单.转换是否那么简单(没什么可担心的)?
  2. 它有助于我减少我的应用程序内存占用空间,内存泄漏等(不知何故?)
  3. 它对我的应用程序有很大的测试影响吗?
  4. 什么是非显而易见的优势?
  5. 搬到它的任何不利之处?

memory memory-management ios ios5 automatic-ref-counting

18
推荐指数
3
解决办法
6495
查看次数

将非ARC转换为ARC项目而不重新创建它?

我只是想知道是否可以将非ARC项目转换为ARC而不重新创建它?谢谢

ios automatic-ref-counting

18
推荐指数
1
解决办法
9130
查看次数