在这段代码中:
#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吗?更改标签文本的代码在函数中,它永远不会返回任何内容?它可以很容易 - (无效)吗?
我还在学习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的所有属性?
谢谢
我有一个视图控制器的子类.将此视图控制器的视图添加到另一个视图后,与视图的任何交互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) 我还是习惯了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)
哪个我不明白.这是什么意思?谢谢!
我遇到了以下地址簿代码的问题(效果很好,但绝对泄漏):
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)类型).我该如何发布桥接实例?
好的,这是我面临的一个奇怪的情况:
我有一个NSWindowController子类,一个窗口,myMainWindow.xib并AppDelegate.m调用NSWindowController这样的:
myWindowController* controller = [[myWindowController alloc] initWithWindowNibName:@"myMainWindow"];
[controller showWindow:self];
Run Code Online (Sandbox Code Playgroud)现在这是什么:
NO,然后应用程序运行正常,窗口也显示正常.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
到底是怎么回事?关于如何解决这个问题的想法(并使窗口出现)?
提示:
cocoa objective-c nswindow nswindowcontroller automatic-ref-counting
更新:
我添加了一个方法来检查字典中的空对象,实际上,他们找到了:

有没有人见过这样的东西?这不是由不正确的内存管理引起的.请注意,左侧的字典对象树实际上是正确的.
结束更新
我在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中传递对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
我想在我的自定义类中实现下标,从而实现以下方法:
- (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.
我有一个带有父视图控制器的应用程序.它有一些按钮,当单击其中一个按钮时,它会显示一个模态视图控制器(使用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) objective-c ×6
ios ×4
cocoa ×2
iphone ×2
xcode ×2
c++ ×1
memory-leaks ×1
nswindow ×1
subscript ×1
xcode4.3 ×1