标签: automatic-ref-counting

ARC的@property定义:强还是保留?

使用Xcode 4.2和ARC,我注意到自动生成的代码NSManagedObject对于属性仍然如下:

@property (nonatomic, retain) NSString * someString;
Run Code Online (Sandbox Code Playgroud)

1)retain现在不应该用strong或替换weak

2)为什么自动生成的代码仍然使用 retain

3)retain在此属性声明中,正确的替换是什么?

我正在调试使用的问题NSFetchRequest,我认为这可能是问题的根源.思考?

properties objective-c retain nsmanagedobject automatic-ref-counting

80
推荐指数
2
解决办法
3万
查看次数

如何为单个文件启用ARC

我想将一个使用ARC编写的Objective-C类带入一个旧项目.互联网为如何为您的项目启用ARC提供了许多参考,然后为单个文件禁用它,但我想做相反的事情.

我想保留项目,即使用手动引用计数,然后为新文件启用ARC.(我的搜索在这里失败了.)

这可能吗?怎么样?

objective-c automatic-ref-counting

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

ARC - __unsafe_unretained的含义?

只是想确保我做对了:

  1. 我需要__unsafe_unretain我不拥有的物品吗?
  2. 如果一个对象是__unsafe_unretained我需要assign@property?这是否意味着不保留对象,只是引用我指定的对象?
  3. 除了代表,我什么时候才能使用它?
  4. 这是ARC的事情还是之前使用过的?

macos objective-c ios xcode4 automatic-ref-counting

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

什么相当于Swift中的@autoreleasepool?

在Swift中,我注意到没有@autoreleasepool{}构造,尽管Swift确实使用ARC.在Swift中管理autoreleasepool的正确方法是什么,或者由于某种原因将其删除了?

nsautoreleasepool automatic-ref-counting swift

75
推荐指数
3
解决办法
2万
查看次数

是否可以调试"由于内存错误而终止"?

在我的应用程序运行时的某个(一致)点,我一直收到xcode错误消息

由于内存错误而终止.

我找不到导致错误的代码,但我可以告诉错误附近的代码(使用断点).

在我的实现中返回某个单元格后直接导致错误

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
Run Code Online (Sandbox Code Playgroud)

UITableViewDataSource委托方法.我可以确认它返回有效UITableViewCell,但我认为解释和发布整个方法将浪费你的时间.但是,我怀疑它可能是由快速,大量的内存分配引起的.

它肯定说Terminated due to memory error,而不是记忆压力.

我想知道什么是信息真的意味着什么.另外,有没有办法调试此消息?没有生成崩溃报告.

我正在使用ARC和iOS 7.

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

74
推荐指数
6
解决办法
8万
查看次数

生成启用了ARC的UUID字符串

我需要在启用ARC的某些代码中生成UUID字符串.

做了一些研究之后,这就是我提出的:

CFUUIDRef uuid = CFUUIDCreate(NULL);
NSString *uuidStr = (__bridge_transfer NSString *)CFUUIDCreateString(NULL, uuid);
CFRelease(uuid);
Run Code Online (Sandbox Code Playgroud)

我是否正确使用__bridge_transfer以避免在ARC下泄漏任何物体?

objective-c automatic-ref-counting

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

NSArray对ARC下的对象的弱引用(__unsafe_unretained)

我需要在NSArray中存储对象的弱引用,以防止保留周期.我不确定使用正确的语法.这是正确的方法吗?

Foo* foo1 = [[Foo alloc] init];
Foo* foo2 = [[Foo alloc] init];

__unsafe_unretained Foo* weakFoo1 = foo1;
__unsafe_unretained Foo* weakFoo2 = foo2;

NSArray* someArray = [NSArray arrayWithObjects:weakFoo1, weakFoo2, nil];
Run Code Online (Sandbox Code Playgroud)

请注意,我需要支持iOS 4.x,__unsafe_unretained而不是__weak.


编辑(2015-02-18):

对于那些想要使用真__weak指针(不是__unsafe_unretained)的人,请查看这个问题:在ARC下归零弱引用

objective-c ios4 ios5 automatic-ref-counting

68
推荐指数
5
解决办法
4万
查看次数

ARC下的NSString属性是强还是复制?

不使用ARC进行编译时,建议使用copy数据类型的属性,例如NSString.我找不到有关copyARC模式使用的适当文档.有人可以告诉我什么适用于ARC?

cocoa-touch objective-c automatic-ref-counting declared-property

59
推荐指数
4
解决办法
2万
查看次数

AVAudioPlayer没有播放任何声音

我正在开发一个需要使用AVFoundation框架播放声音的iOS应用程序.Xcode 4中的工作区结构包含两个项目:

  • 工作区
    • 应用程序本身(主要项目)
    • 实用程序库

构建实用程序库之后,它会生成一个静态库,该库在主应用程序中用作框架.

因此,当尝试使用下面的代码在主应用程序内播放声音时,它会按预期工作.

NSString *resourcePath = [[NSBundle mainBundle] resourcePath];
NSString *path = [NSString stringWithFormat:@"%@/sound.mp3", resourcePath];

NSURL *url = [NSURL fileURLWithPath:path];
NSError *error = nil;

AVAudioPlayer *audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url
                                                                    error:&error];
[audioPlayer play];
Run Code Online (Sandbox Code Playgroud)

相反,当尝试使用与上面相同的代码在实用程序库中播放完全相同的声音(或任何其他声音)时,即使错误为nilaudioPlayer属性值为正确,也不会播放任何声音(数字)频道,持续时间).

我确保AVFoundation框架在两个项目中.

此外,我的类使用AVAudioPlayerDelegate协议并实现这两个方法:

- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag;
- (void)audioPlayerDecodeErrorDidOccur:(AVAudioPlayer *)player error:(NSError *)error;
Run Code Online (Sandbox Code Playgroud)

尝试播放声音后,这些方法都不会被调用.

如果我使用AudioToolbox框架,那么它会播放声音.但AVFoundation由于几个原因,我对使用感兴趣.

怎么知道发生了什么?我错过了什么AVFoundation吗?它可能与AVAudioPlayer在静态库中使用有关吗?

提前致谢.

audio objective-c avfoundation xcode4 automatic-ref-counting

58
推荐指数
5
解决办法
3万
查看次数

如何在xcode项目中启用/禁用ARC?

如果已在禁用ARC的情况下创建项目,如何启用它,反之亦然?

xcode objective-c automatic-ref-counting

57
推荐指数
3
解决办法
9万
查看次数