我收到了这个警告
"自动引用计数问题:将保留对象分配给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)
但没有运气
你能帮我弄清楚出了什么问题吗?
我是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 =".如何获取其路径以及如何从照片库中检索照片.任何身体帮助我.提前致谢.
我有一个应用程序从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我的代码中没有任何手动发布声明!
请帮我解决这个问题!
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) 所以我正在尝试将旧项目转换为自动引用计数.我正在尝试使用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)
}
我花了一些时间来调试ARC和自定义dealloc函数的一个奇怪的问题.
NSOperation类的DataRequestDataRequest保持对我生成的操作的唯一引用,并在操作完成块中销毁.它总是被破坏(它dealloc总是被执行)dealloc.我只有一个NSLog调用.......问题是:
如果我在调试器中运行它,dealloc中的断点永远不会被命中,日志消息永远不会出现.主要是我以为操作漏了.
如果我在仪器中运行它,一切都很好,系统控制台打印消息,Allocations仪器报告从正确的堆栈快照中释放的操作,包括自定义dealloc.没有检测到泄漏.
我100%确定我使用相同的编译器设置进行调试和分析.
最后最令人困惑的事情:如果我创建了一个自定义版本[DataRequest dealloc]并且我付诸实践self.operation = nil;- 即使从调试器中也可以正常工作.
有没有人提示某些编译器链接器选项试图看到一些区别?这可能是Apple工具中的错误(我们所有人都在为我们自己的错误指责一条大鱼,对吧?)
......是的,我尝试过使用GDB和LLDB.结果是一样的 - 可能表明什么.
我试图创建一个简约的样本,但它只是工作(确实);)
谢谢
我在llvm网站上阅读ARC文档:http://clang.llvm.org/docs/AutomaticReferenceCounting.html#autoreleasepool
..尤其是@autoreleasepool.
在使用NSAutoreleasePool的许多当前实现中,我看到在循环迭代期间池被定期耗尽的情况 - 我们如何使用@autorelease池执行相同的操作,或者是否已经在某种程度上为我们完成了这些操作?
其次,文档说明如果抛出异常,池就不会耗尽......好的例外是名称异常,但是如果它们确实发生了,你可能希望在不泄漏大量内存的情况下恢复.文档未指定何时释放这些对象.
任何人都有关于这些点的任何信息?
我目前正在使用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) 我正在使用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
我有一个UITableView我自然显示的,UITableViewCells它们都是同一个类,让我们称之为MyCell.所以我有一个MyCell.xib,一个MyCell.h和一个MyCell.m.
不幸的是,这个单元确实包含一个子视图,它包含不同的内容,例如a train subview和a car subview.因此,如果UITableView需要一个新的单元格,它总是一个MyCell但有时它包含一个火车子视图,有时还包含一个汽车子视图.
现在,这是我的问题:如何MyCell正确地重复使用?单元本身可以按预期重复使用(在.xib中我定义了它的标识符)但是必须为每个单元一次又一次地创建子视图.我的第一个想法是MyCell根据内容更改标识符,但遗憾的是,无法在运行时更改reuseIdentifier.但是,我可以实现我自己的- (NSString *) reuseIdentifier {}工作,但我不认为它很棒.有一个更好的方法吗?
提前谢谢了!
编辑:我意识到我需要添加子视图存储在他们自己的类/ xib中以保持他们的代码分离.
objective-c ×6
iphone ×4
debugging ×2
ios ×2
memory ×2
alloc ×1
allocation ×1
dealloc ×1
dictionary ×1
instruments ×1
keychain ×1
lldb ×1
llvm ×1
object ×1
uitableview ×1
xcode ×1
xcode4 ×1