标签: automatic-ref-counting

Iphone dev - IBAction和@property

在这段代码中:

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController
{
  UILabel *labelsText;
}

@property(strong, nonatomic) IBOutlet UILabel *labelsText;

-(IBAction) clicked: (id) sender;

@end
Run Code Online (Sandbox Code Playgroud)

1. @property的行..据我所知是@property(blabla)数据类型变量但代码有3个东西?IBoutlet,UIlabel和*labelsText

2.单击的功能将根据按下的按钮更改标签内容,因为两个按钮都连接到该功能.但它会返回IBAction吗?更改标签文本的代码在函数中,它永远不会返回任何内容?它可以很容易 - (无效)吗?

iphone automatic-ref-counting

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

那么什么是ARC的交易以及在viewDidUnload上发布属性/子视图

我还在学习iOS开发,并且一直在使用各种教程和书籍.有些预ARC,有些有ARC.

在某些情况下,我们被教导在viewDidUnload上释放ViewController的所有属性和子视图,但在某些情况下我被告知不再需要它.

有人可以给出明确的答案吗?在iOS 5+中,是否需要完成整个过程:

-(void)viewDidUnload
{
  [super viewDidUnload];
  self.photoViewCell = nil;
  self.photoImageView = nil;
  self.firstNameTextField = nil;
  self.lastNameTextField = nil;
}
Run Code Online (Sandbox Code Playgroud)

... 或不?如果是这样,这仅适用于作为UIView后代的属性,还是适用于ViewController的所有属性?

谢谢

objective-c-2.0 ios automatic-ref-counting xcode4.3

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

与ARC奇怪的双重释放?

我有一个视图控制器的子类.将此视图控制器的视图添加到另一个视图后,与视图的任何交互MyViewController都会导致崩溃.当运行僵尸时它显示一个双重释放,保留计数myViewController已经变为-1.

我正在调用alloc这个对象,它应该将保留计数设置为1,并且我还将视图添加myViewcontroller到另一个视图,这应该将保留计数设置为2.那么我如何获得双重释放?这只会在ARC上崩溃

- (void)viewDidLoad {
   [super viewDidLoad];

   MyViewcontroller *myViewcontroller = [[MyViewController alloc] init];
   [self.view addSubview:myViewcontroller.view];
}
Run Code Online (Sandbox Code Playgroud)

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

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

ARC与CGColorRef

我还是习惯了ARC和桥梁演员.我在关于CGColor的文档中看到了这一点

编译器处理从Cocoa方法返回的CF对象编译器理解返回Core Foundation类型的Objective-C方法遵循历史Cocoa命名约定(请参阅高级内存管理编程指南).例如,编译器知道,在iOS中,UIColor的CGColor方法返回的CGColor不归属.您仍必须使用适当的类型转换,如此示例所示:

NSMutableArray *colors = [NSMutableArray arrayWithObject:(id)[[UIColor darkGrayColor] CGColor]];
[colors addObject:(id)[[UIColor lightGrayColor] CGColor]];
Run Code Online (Sandbox Code Playgroud)

所以在我的代码中,我尝试了这个:

gradientLayer.backgroundColor = (id)([UIColor clearColor].CGColor));
Run Code Online (Sandbox Code Playgroud)

我收到了关于ARC的编译器警告,需要使用桥接转换.我还是不明白为什么.当我点击"Fix-It"时,它给了我这个:

gradientLayer.backgroundColor = (__bridge CGColorRef)((__bridge id)([UIColor clearColor].CGColor));
Run Code Online (Sandbox Code Playgroud)

哪个我不明白.这是什么意思?谢谢!

iphone automatic-ref-counting

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

对象的潜在泄漏 - 调用函数'ABMultiValueCopyValueAtIndex'返回具有+1保留计数的Core Foundation对象

我遇到了以下地址簿代码的问题(效果很好,但绝对泄漏):

ABMultiValueRef email = ABRecordCopyValue(person, property);
NSString *type = (__bridge NSString *)(ABMultiValueCopyValueAtIndex(email, 0));
self.textEmail.text = type;
CFRelease(email);
Run Code Online (Sandbox Code Playgroud)

我已经使用CFRelease(email)声明修复了一个泄漏,但无法解决此问题:

在此输入图像描述

我不能调用[type release],因为这是一个ARC项目,不允许CFRelease((CFTypeRef)类型).我该如何发布桥接实例?

xcode memory-leaks ios automatic-ref-counting

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

NSWindowController和ARC的奇怪问题

好的,这是我面临的一个奇怪的情况:

  • 我有一个NSWindowController子类,一个窗口,myMainWindow.xibAppDelegate.m调用NSWindowController这样的:

    myWindowController* controller = [[myWindowController alloc] initWithWindowNibName:@"myMainWindow"];
    [controller showWindow:self];
    
    Run Code Online (Sandbox Code Playgroud)

现在这是什么:

  • 当ARC设置为NO,然后应用程序运行正常,窗口也显示正常.
  • 当我将ARC设置为YES- 在我设置它之后(并且为了JUST 1运行) - 它显示了一堆错误:

2月17日16:35:45 DrKameleons-iMac.local MyApp [16903]:kCGErrorIllegalArgument:_CGSFindSharedWindow:WID 2409 Feb 17 16:35:45 DrKameleons-iMac.local MyApp [16903]:kCGErrorFailure:设置断点@ CGErrorBreakpoint()到记录时捕获错误.2月17日16:35:45 DrKameleons-iMac.local MyApp [16903]:kCGErrorIllegalArgument:CGSOrderFrontConditional:无效的窗口

窗户没有显示出来.

现在,如果我尝试重新运行应用程序(不更改任何内容,ARC仍然打开),窗口仍然不会显示.但是根本没有错误.:S

到底是怎么回事?关于如何解决这个问题的想法(并使窗口出现)?


提示:

  • 在Mac OS X 10.7.5上运行
  • Xcode版本:4.5.1

cocoa objective-c nswindow nswindowcontroller automatic-ref-counting

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

NSMutableDictionary中的对象突然变为null

更新:

我添加了一个方法来检查字典中的空对象,实际上,他们找到了:

NSMutableDictionary中为空

有没有人见过这样的东西?这不是由不正确的内存管理引起的.请注意,左侧的字典对象树实际上是正确的.

结束更新

我在NSMutableDictionary启用ARC时添加了许多条目.添加其中一个后,添加的对象突然变为空.这是代码(我扩展它以确保我没有发疯):

NSMutableDictionary *base = [NSMutableDictionary dictionary];

id o = [GAConstant kTRUE];
id k = [GAClause parse:@"(x 1 1)"];
[base setObject:o forKey:k];
NSLog(@"### Added (%@ -> %@): %@", k, o, base);

o = [GAClause parse:@"(y X)"];
k = [GAClause parse:@"(x 2 X)"];
[base setObject:o forKey:k];
NSLog(@"### Added (%@ -> %@): %@", k, o, base);

o = [GAConstant kTRUE];
k = [GAClause parse:@"(y 3)"];
[base setObject:o forKey:k];
NSLog(@"### Added (%@ -> %@): %@", k, o, base); …
Run Code Online (Sandbox Code Playgroud)

objective-c ios automatic-ref-counting

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

Objective-C:如果我在ARC中的函数中返回一个C++对象,它是否会创建一个副本,我是否必须手动释放该副本?

我试图在Objective-C中传递对C++对象的引用,所以我可以从另一个类访问该对象,具体来说:

// ClassA
-(b2World *)getWorld{
    return world;
}
Run Code Online (Sandbox Code Playgroud)

在另一个类中,我将返回的对象分配给ivar

// ClassB
-(void)initClassB{
    world_ = [ClassA getWorld];
}
Run Code Online (Sandbox Code Playgroud)

或者直接访问返回对象的方法

// Classb
-(void)doSomething{
    [[ClassA getWorld] doSomething];
}
Run Code Online (Sandbox Code Playgroud)

在两种情况下都复制了c ++对象(b2World)并且我必须在ARC环境中手动释放复制的对象,这是正确的吗?如果是这样,在ARC中传递c ++对象的最佳做法是什么(传递对象的所有权不应该被转移,例如它应该是一个弱引用)?

谢谢你的帮助.

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

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

(id)obj isKindOfClass:抛出错误

我想在我的自定义类中实现下标,从而实现以下方法:

- (id)objectForKeyedSubscript:(id <NSCopying>)key NS_AVAILABLE(10_8, 6_0);
- (void)setObject:(id)obj forKeyedSubscript:(id <NSCopying>)key NS_AVAILABLE(10_8, 6_0);
Run Code Online (Sandbox Code Playgroud)

但我有一个奇怪的问题,因为我以前从未见过它:[(id)obj isKindOfClass:]抛出一个ARC语义问题:

没有已知的选择器实例方法'isKindOfClass:'

据我所知,之前我没有遇到任何问题id......这是Xcode的错误(是的,我使用的是Xcode 5 DP2),还是我忘记了重要的事情?

- (id)objectForKeyedSubscript:(id <NSCopying>)key {
    if(![key isKindOfClass:[NSString class]]) { // ERROR
        ...
    } else {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

注意:我不想听到"哦,这是在NDA之下,不应该在这里讨论".我不讨论任何API,功能,等等.我只是让你知道我正在使用测试版软件,所以它可能只是一个简单的bug.

xcode objective-c subscript automatic-ref-counting

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

ARC下没有发布内存

我有一个带有父视图控制器的应用程序.它有一些按钮,当单击其中一个按钮时,它会显示一个模态视图控制器(使用XIB).我用来呈现和解散Modal VC的代码是:

iPadViewController *iPadVC = [[iPadViewController alloc] initWithNibName:nil bundle:nil];
        [self presentViewController:iPadVC animated:YES completion:NULL];
Run Code Online (Sandbox Code Playgroud)

并解雇:

-(IBAction)Back:(id)sender{
[self.presentingViewController dismissViewControllerAnimated:YES completion:nil];
}
Run Code Online (Sandbox Code Playgroud)

所以问题是,当我解雇它时,它不会释放任何内存.如果我把它呈现3/4次就会崩溃.我正在使用ARC,从来没有遇到过类似的问题,因为我坚持认为ARC完成了所有的内存管理工作.我确实有一些需要大量空间的背景,他们也没有被释放.我试过了 :

[backgroundImage removeFromSuperview];
backgroundImage=nil;
Run Code Online (Sandbox Code Playgroud)

使用此代码确实减少了内存,我不确定图像是否已被释放,因为下次按下按钮时内存增加到近300mb并因"内存压力"而终止.如果VC被发布它会工作正常,因为它只在iPad上使用160mb,在iPhone上使用65mb.此外,我的图像是通过Xib实用程序选择的:

IMG http://i42.tinypic.com/2z8yiva.png

我尝试使用Xcode仪器并且它没有显示任何泄漏(!)但它确实表明每次单击按钮时分配都在增长和增长.

使用Xcode Tools分配http://i43.tinypic.com/2eutv78.png

在我的ViewController.h上:

IBOutlet UIImageView (...);
IBOutlet UIImageView (...);
IBOutlet UILabel (...);
IBOutlet UIButton (...);
IBOutlet NSTimer (...);
IBOutlet UIImage (...);
IBOutlet UIView (...);

-(IBAction)Back:(id)sender;

@property (nonatomic, assign) int ;
@property (nonatomic) IBOutlet UIButton ;
@property (nonatomic) IBOutlet UIButton ;
@property (nonatomic) IBOutlet UIButton ;
@property (nonatomic) IBOutlet UIView ;
@property (nonatomic) …
Run Code Online (Sandbox Code Playgroud)

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

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