Tag: 自动ref counting

ARC和非ARC NSString初始化

最近,我在Objective-C / iOS程序中使用了自动引用计数function,并且真正享受了这个function。 有一件事我不明白这是正确的方法来初始化一个NSString 。 我已经看到这个方法与ARC和非ARC项目一起使用: NSString *myClassicString = [[NSString alloc] initWithFormat:@"My great non-ARC string!"]; 我也发现下面的方法可以用来初始化ARC中的NSString ,我更喜欢它,因为方便: NSString *myARCString = [NSString stringWithFormat:@"My new simple initialization string!"]; 这两者有什么区别? 有没有正确的方法? 是一个更好?

ARC和释放在方法中创build的对象

我偶然发现了一个我在其他地方找不到答案的问题。 当我调用一个返回指向一个稍后使用的对象的指针的方法,并且在结尾设置为零时,它仍然被分配在内存中(根据Instruments)。 我正在使用XCode 4.6.3和iOS 6.1。 ARC打开。 这里是示例代码: ClassA.h @interface ClassA : NSObject -(void)runSomething; @end ClassA.m #import "ClassA.h" #import "ClassB.h" @implementation ClassA -(void)runSomething { int counter = 0; while (true) { ClassB *instance = [self makeClassBWithNumber:counter]; NSLog(@"%d", [instance getNumber]); [NSThread sleepForTimeInterval:0.01]; instance = nil; counter++; } } -(ClassB*) makeClassBWithNumber:(int)number { return [[ClassB alloc] initWithNumber:number]; } @end […]

没有已知的select器的实例方法

我正在开发一个iOS 4应用程序,使用最新的SDK, XCode 4.2和ARC 。 我已经添加了一个方法到appDelegate.h #import <UIKit/UIKit.h> @class ViewController; @class SecondViewController; @interface AppDelegate : UIResponder <UIApplicationDelegate> { UINavigationController* navController; ViewController* viewController; SecondViewController* secondViewController; } @property (strong, nonatomic) UIWindow *window; – (void) showSecondViewController; @end 它在appDelegate.m实现 #import "AppDelegate.h" #import "ViewController.h" #import "SecondViewController.h" @implementation AppDelegate @synthesize window = _window; – (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.window = […]

Xcode ARC转换工具问题

我第一次运行ARC转换工具。 我已经按照说明处理了转换工具在实际运行之前发现的文件中的所有问题/错误。 我也有几个第三方库,我告诉ARC跳过在目标转换对话框中取消选中它们。 运行该工具后,它显示了所有更改的文件的报告,但没有文件已被更改。 接下来,我保存并尝试构build项目,只发现由于所有调用在我的项目中保留和释放,我有近1000个构build错误。 我的理解是,转换工具应该删除所有的保留,释放和autorelease调用,但是我不是这种情况。 有没有人遇到过这个问题,如果是的话,你是如何解决这个问题的? 或者是我的责任,从我的应用程序中删除所有保留和发布? 如果是这样,我不知道转换工具的重点。 请指教。 提前致谢

“ARC项目中缺less”警告

我把一个项目重构到了ARC。 它看起来不错,但有一个使用通知中心的对象。 我删除了自定义dealloc方法中的观察者。 这在非ARC项目中运行良好。 它也适用于ARC,但我得到一个疯狂的警告:“方法可能会丢失[super dealloc]调用。” 在一个ARC项目中,当方法结束时,它会自动完成。 更好:我不能在ARC项目中调用它! 这必须是一个XCode错误,对吧? 这是我的代码: – (void)dealloc { [[NSNotificationCenter defaultCenter] removeObserver:self]; // [super dealloc]; will be called automatically } 我总是希望编写不会引发警告的代码。 有黄色惊叹号的方法吗?

在启用ARC的项目中使用alloc,init

其实我正在开发一个启用了ARC的项目。 我知道使用alloc和init正在取得对象的ownership 。 我知道,如果我创build一个像这样的string NSString *myString = [[NSString alloc]initWithFormat:@"Something"]; 那么我需要release我自己的myString 。 如果我使用ARC启用? 我无法释放自己。 那么它会造成泄漏? 还是我不应该这样创build对象? 我也可以像下面的代码一样创build一个string。 NSString *myString = [NSString stringWithFormat:@"Something"]; 但是,我需要准确使用ARC启用项目的types? 如果我使用第一种types会发生什么?

如何用双指针声明NSString的variables

我想用双指针,我试图这样声明。 NSString **a; 但是,Xcode向我显示错误“指向非consttypes的NSString *”没有明确的所有权“,并且无法编译。 最后我想这样做。 NSString **a; NSString *b = @"b"; NSString *c = @"c"; a = &b; *a = c; NSLog(@"%@",b);//I wanna see "c" 请让我知道任何build议。

ARC中的 autorelease]相当于什么?

ARC中的[[something retain] autorelease]相当于[[something retain] autorelease] ? 我有一个类DBRequest调用我的委托来表示完成的问题。 然后,我的委托设置DBRequest实例为零,这是dealloc的。 但是,当堆栈popup我的委托,并跳回到DBRequest,它当然然后崩溃。 如果我不在ARC中,在我的委托中,我只是在释放引用之前执行[[theDbRequest retain] autorelease] ,以便它能够存活足够长的时间,直到下一个运行循环自动释放为止。 我应该在ARC做什么?

closurespopup窗口,当弹窗仍然可见时,达到

我有一个UIPopoverController存储在我的视图控制器的一个强大的属性。 当用户在popup窗口显示的同时旋转iPad时,我忽略popup窗口并将我的属性设置为零。 if (self.popover != nil) { [self.popover dismissPopoverAnimated:NO]; self.popover.delegate = nil; self.popover = nil; } 当代码到达self.popover = nil,ARC试图解除分配UIPopoverController,但它崩溃,因为它应该仍然可见。 如果没有崩溃,我该如何解雇和淘汰popover?

iOS – 开始iOS教程 – variables之前的下划线?

我开始学习如何在一分钟的iOS开发,我现在有Apress开始IOS6书,我正在努力。 在第二章中,有一个简单的教程来展示两个button和一个标签,当按下button时,标签上会显示哪个button被按下。 我已经完成了这个教程,但是提出了一个我找不到答案的问题。 本教程使用ARC(自动引用计数),以防有所作为。 这里是代码, 头文件: #import <UIKit/UIKit.h> @interface MTMViewController : UIViewController @property (weak, nonatomic) IBOutlet UILabel *statusLabel; – (IBAction)buttonPressed:(UIButton *)sender; @end 和m文件: #import "MTMViewController.h" @implementation MTMViewController – (IBAction)buttonPressed:(UIButton *)sender { NSString *title = [sender titleForState:UIControlStateNormal]; NSString *plainText = [NSString stringWithFormat:@"%@ button pressed.", title]; statusLabel.text = plainText; } @end 以上是它在书中的performance,但是当在Xcode中做这个教程时,我无法用下面的代码来编译: statusLabel.text = plainText; 而不得不将其更改为: _statusLabel.text […]