小编Phl*_*bbo的帖子

自动引用计数问题:将保留对象分配给unsafe_unretained变量; 对象将在分配后释放

我收到了这个警告

"自动引用计数问题:将保留对象分配给unsafe_unretained变量;对象将在分配后释放"

这是代码

.H

@interface myObject : NSObject
{
}

@property (assign) id progressEnergy;

@end
Run Code Online (Sandbox Code Playgroud)

.M

@implementation myObject

@synthesize progressEnergy;

-(id)init
{
    if ( ( self = [super init] ) )
    {
        progressEnergy = [[progress alloc] init]; //warning appear on this line
    }

    return self;
}

@end
Run Code Online (Sandbox Code Playgroud)

我已经尝试过了

@property (assign) progress* progressEnergy;
Run Code Online (Sandbox Code Playgroud)

但没有运气

你能帮我弄清楚出了什么问题吗?

object objective-c alloc automatic-ref-counting

11
推荐指数
2
解决办法
9942
查看次数

如何从照片库获取图像路径以及如何从iphone中的照片库中检索图像?

我是iphone的新手.在我的小应用程序中,如何从照片库获取图像路径.我使用以下代码来获取图像并放置在imageview中.

-(IBAction) selectimage
{
UIImagePickerController *picker=[[UIImagePickerController alloc] init];
picker.delegate=self;
picker.sourceType=UIImagePickerControllerSourceTypeSavedPhotosAlbum;
[self presentModalViewController:picker animated:YES];
[picker release];
}
-(void) imagePickerController:(UIImagePickerController *)UIPicker didFinishPickingMediaWithInfo:(NSDictionary *) info
{
[UIPicker dismissModalViewControllerAnimated:YES];
imageview.image=[info objectForKey:"UIImagePickerControllerOriginalImage"];
    NSLog("Image Path=%@",imageview.image);
}
Run Code Online (Sandbox Code Playgroud)

它成功地放置在Imageview上.但我无法得到它的图像路径.我正在使用nslog("%@",imageview.image); 它在控制台中显示"Image Path =".如何获取其路径以及如何从照片库中检索照片.任何身体帮助我.提前致谢.

iphone uiimagepickercontroller

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

EXC_BAD_ACCESS消息发送到解除分配的实例,但我正在使用ARC?

我有一个应用程序从SOAP Web服务获取信息,我想在一个显示结果UITableView.

我有一个以前版本的这个应用程序,我正在创建一个新版本,基本上清理东西,摆脱一堆已弃用,不再使用的遗留代码.

在之前的版本中,这很有效.在新版本中,没有那么多.

基本上,当前场景返回3个字符串,我试图用作我的数据的基础UITableView.

我正在努力解决这个问题,因为它太难以追查EXC_BAD_ACCESS错误了!

(顺便说一句,如果有人有办法使调试体验更像Visual Studio,我很乐意听到它!没有任何想法导致错误,并且无法通过我查看,这是非常令人沮丧的崩溃时的局部变量,看看是什么.我已经在异常断点中添加了,但这似乎并不多.)

无论如何,导致出错的行是:

return [[self Libraries] count];
Run Code Online (Sandbox Code Playgroud)

它发生在tableView:numberOfRowsInSection:.

错误消息我得到APPEARS引用应该存储在中的字符串NSMutableArray [self Libraries].

这里发生了什么?
我正在使用ARC,所以不应该正确处理所有内存管理吗?
ANYWHERE我的代码中没有任何手动发布声明!

请帮我解决这个问题!

memory exc-bad-access objective-c automatic-ref-counting

10
推荐指数
1
解决办法
5741
查看次数

ARC:如何发布静态变量?

Will dealloc(下面)释放NSString静态变量指向的exampleString

// ExampleClass.h

@interface ExampleClass : NSObject

@end

// ExampleClass.m

static NSString *exampleString;

@implementation ExampleClass

- (void)dealloc {
    exampleString = nil;
}

- (id)init {
    self = [super init];
    if (self) {
        exampleString = [NSString stringWithFormat:@"example %@", @"format"];
    }
    return self;
}

@end
Run Code Online (Sandbox Code Playgroud)

objective-c static-variables automatic-ref-counting

10
推荐指数
1
解决办法
5157
查看次数

iPhone从钥匙串中获取数据字典

所以我正在尝试将旧项目转换为自动引用计数.我正在尝试使用xCode所具有的转换工具,但它说要在转换之前解决一些问题.我不知道如何解决这个错误.它是在keychain文件的实现中.此方法是返回错误的方法,特别是具有SecItemCopyMatching的行.我得到的错误说:"使用ARC来禁止使用指向'CFTypeRef*'(又名'const void**')的Objective-C指针的间接指针.我一直在寻找google,apple docs,和一堆其他垃圾,找不到更好的方法来获取钥匙串中的现有数据字典.任何帮助赞赏.谢谢!

-(NSMutableDictionary*)fetchDictionary {

NSMutableDictionary *genericPasswordQuery = [self buildSearchQuery];

NSMutableDictionary *outDictionary = nil;
OSStatus status = SecItemCopyMatching((__bridge_retained  CFDictionaryRef)genericPasswordQuery, (CFTypeRef*)&outDictionary);

if (DEBUG) printf("FETCH: %s\n", [[self fetchStatus:status] UTF8String]);

if (status == errSecItemNotFound) return NULL;
return outDictionary;
Run Code Online (Sandbox Code Playgroud)

}

iphone dictionary keychain automatic-ref-counting

9
推荐指数
1
解决办法
9542
查看次数

Xcode和ARC调试问题(跳过dealloc)

我花了一些时间来调试ARC和自定义dealloc函数的一个奇怪的问题.

  1. 我是继承NSOperation类的
  2. 我为此操作设置了完成块
  3. 该操作由非常扁平的对象(没有方法,自动ivars,两个强属性)的强属性引用,可以调用此对象DataRequest
  4. 遵循所有准则,完成块仅使用对本地对象的弱引用(包括操作本身)
  5. 编译器和分析器都不会产生任何问题
  6. DataRequest保持对我生成的操作的唯一引用,并在操作完成块中销毁.它总是被破坏(它dealloc总是被执行)
  7. 我的操作有一个习惯dealloc.我只有一个NSLog调用.

......问题是:

如果我在调试器中运行它,dealloc中的断点永远不会被命中,日志消息永远不会出现.主要是我以为操作漏了.

如果我在仪器中运行它,一切都很好,系统控制台打印消息,Allocations仪器报告从正确的堆栈快照中释放的操作,包括自定义dealloc.没有检测到泄漏.

我100%确定我使用相同的编译器设置进行调试和分析.

最后最令人困惑的事情:如果我创建了一个自定义版本[DataRequest dealloc]并且我付诸实践self.operation = nil;- 即使从调试器中也可以正常工作.

有没有人提示某些编译器链接器选项试图看到一些区别?这可能是Apple工具中的错误(我们所有人都在为我们自己的错误指责一条大鱼,对吧?)

......是的,我尝试过使用GDB和LLDB.结果是一样的 - 可能表明什么.

我试图创建一个简约的样本,但它只是工作(确实);)

谢谢

debugging xcode instruments dealloc automatic-ref-counting

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

@autoreleasepool语义

我在llvm网站上阅读ARC文档:http://clang.llvm.org/docs/AutomaticReferenceCounting.html#autoreleasepool

..尤其是@autoreleasepool.

在使用NSAutoreleasePool的许多当前实现中,我看到在循环迭代期间池被定期耗尽的情况 - 我们如何使用@autorelease池执行相同的操作,或者是否已经在某种程度上为我们完成了这些操作?

其次,文档说明如果抛出异常,池就不会耗尽......好的例外是名称异常,但是如果它们确实发生了,你可能希望在不泄漏大量内存的情况下恢复.文档未指定何时释放这些对象.

任何人都有关于这些点的任何信息?

objective-c llvm automatic-ref-counting

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

带有LLDB的Xcode 4.3中的奇怪错误消息

我目前正在使用Xcode 4.3.2编写iOS应用程序.在我的代码的大多数部分中,使用LLDB进行调试工作正常.但是在某些时候,我在逐步执行代码时收到了一条奇怪的消息.当我将鼠标悬停在iVar上时,它说

错误[IRForTarget]:找不到Objective-C间接ivar符号OBJC_IVAR _ $ _ MyFancyClass.iVar

而不是向我展示价值.但是,在Variables View,我可以看到它很好.直到我选择Print Description of ...那个,因为那时,Xcode崩溃......当我使用GDB时,悬停工作,但变量的类型和值是错误的.

我认为我的代码有问题,这反过来导致调试器失败.但是,代码运行正常.我很乐意提供一些样本代码,但课程相当长,而且我无法确定我的搞砸的确切位置.那么有没有人遇到类似的行为?

更新:实际上,似乎这在我的代码中到处发生,而不仅仅是在某些特定文件中.如果它有帮助,当LLDB显示上述消息时,GDB总是显示拥有iVar的Class的对象,而不是iVar本身.看起来内存管理有问题.例如,如果我说的话

[notificationCenter addObserver:self selector:@selector(foo) name:bar object:objA];
Run Code Online (Sandbox Code Playgroud)

即使我有选择器也会被调用

[notificationCenter postNotificationName:bar object:objB];
Run Code Online (Sandbox Code Playgroud)

debugging objective-c ios xcode4 lldb

6
推荐指数
1
解决办法
9349
查看次数

使用ARC时将对象设置为nil?

我正在使用iPhone项目ARC.该应用程序是基于导航的应用程序UINavigationController.

典型的用例是多次从"主" UIViewController转到"次" UIViewController,可能多达100次.辅助控制器有许多静态的本地PNG图像,其中一些是重复的.

我正在分析应用程序,我可以看到,当从"主"控制器转到"辅助"控制器时,它分配大约0.8 MB,但是,当按下后退按钮时,它不会释放内存.所以,当我再次进入辅助控制器时,会分配其他0.8 MB,依此类推......

调试时,我注意到viewDidUnload:辅助UIViewController方法永远不会被调用,但我也读到了这个方法,我应该设置为nil控制器保存的引用.这样做viewDidDisappear:没有用,因为我希望只有在按下后退按钮时才会发生这种情况,也就是说,当从堆栈弹出控制器时(viewDidDisappear:在按下堆栈上的另一个控制器时也会调用该方法).

所以问题是:我有什么必须这样做的吗?我可以强制调用该方法吗?这种行为是否正常(分析,在"主要" - >"次要" - >"主要" - >"次要" - > ......的某些周期后,分配达到20MB?

谢谢大家

memory iphone allocation automatic-ref-counting viewdidunload

6
推荐指数
1
解决办法
1536
查看次数

如何使具有不同子视图的UITableViewCell可重用?

我有一个UITableView我自然显示的,UITableViewCells它们都是同一个类,让我们称之为MyCell.所以我有一个MyCell.xib,一个MyCell.h和一个MyCell.m.

不幸的是,这个单元确实包含一个子视图,它包含不同的内容,例如a train subview和a car subview.因此,如果UITableView需要一个新的单元格,它总是一个MyCell但有时它包含一个火车子视图,有时还包含一个汽车子视图.

现在,这是我的问题:如何MyCell正确地重复使用?单元本身可以按预期重复使用(在.xib中我定义了它的标识符)但是必须为每个单元一次又一次地创建子视图.我的第一个想法是MyCell根据内容更改标识符,但遗憾的是,无法在运行时更改reuseIdentifier.但是,我可以实现我自己的- (NSString *) reuseIdentifier {}工作,但我不认为它很棒.有一个更好的方法吗?

提前谢谢了!

编辑:我意识到我需要添加子视图存储在他们自己的类/ xib中以保持他们的代码分离.

iphone objective-c uitableview ios

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