相关疑难解决方法(0)

Xcode的隐藏功能

随着新手大量涌入Xcode,我确信有很多Xcode提示和技巧可供分享.

你的是什么?

macos xcode cocoa objective-c

338
推荐指数
66
解决办法
24万
查看次数

在Objective-C中将消息发送到nil

作为正在阅读Apple的Objective-C 2.0文档的Java开发人员:我想知道" 向nil发送消息 "意味着什么 - 更不用说它实际上有用了什么.摘自文档:

Cocoa中有几种模式可以利用这一事实.从消息返回到nil的值也可能是有效的:

  • 如果该方法返回一个对象,任何指针类型,任何大小小于或等于sizeof(void*),float,double,long double或long long的整数标量,则发送给nil的消息返回0 .
  • 如果该方法返回一个结构,如Mac OS X ABI函数调用指南所定义的那样在寄存器中返回,那么发送给nil的消息将为数据结构中的每个字段返回0.0.其他结构数据类型不会用零填充.
  • 如果该方法返回除上述值类型之外的任何内容,则发送到nil的消息的返回值是未定义的.

Java是否让我的大脑无法解释上面的解释?或者是否有一些我想念的东西会让它像玻璃一样清晰?

我确实在Objective-C中得到了消息/接收器的概念,我只是对接收器碰巧感到困惑nil.

objective-c

105
推荐指数
10
解决办法
5万
查看次数

什么是NSParameterAssert?

什么是NSParameterAssert

有人可以用例子来解释吗?

iphone objective-c

82
推荐指数
1
解决办法
2万
查看次数

iPhone正确使用Application Delegate

我希望能够通过我的应用程序中的任何位置引用某些状态/对象.例如,用户登录到他们的应用程序,我需要调用Web服务并检索用户信息.然后,我希望能够从应用程序的任何位置访问此信息,如下所示:

myAppDelegate *delegate = [[UIApplication sharedApplication] delegate];
user = delegate.u;
Run Code Online (Sandbox Code Playgroud)

是否在应用程序委托中将实例变量设置为User对象,并在需要时从那里引用它是一种糟糕的方式来实现它?我通常根据用户的登录设置它.

想听听专业人士如何处理这个.

iphone cocoa-touch objective-c

58
推荐指数
3
解决办法
5万
查看次数

iPhone上的Double vs float

我刚刚听说iphone不能原生地加倍,从而使它们比常规漂浮慢得多.

这是真的?证据?

我对这个问题很感兴趣,因为我的程序需要高精度计算,而且我必须在速度上妥协.

iphone floating-point cocoa-touch ieee-754

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

为什么我不应该在init/dealloc中使用Objective C 2.0访问器?

@ mmalc的 响应这个问题,他指出:"一般来说,你应该使用访问中的dealloc方法(或init)." 为什么mmalc这样说?

我能想到的唯一真正原因是性能和避免@dynamic制定者的未知副作用.

讨论?

cocoa objective-c

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

让NSRunLoop等待设置标志的最佳方法是什么?

NSRunLoop的Apple文档中,有一些示例代码演示了在等待标志由其他东西设置时暂停执行.

BOOL shouldKeepRunning = YES;        // global
NSRunLoop *theRL = [NSRunLoop currentRunLoop];
while (shouldKeepRunning && [theRL runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]]);
Run Code Online (Sandbox Code Playgroud)

我一直在使用它并且它有效,但在调查性能问题时,我将其跟踪到这段代码.我使用几乎完全相同的代码片段(只是标志的名称是不同的:)如果我NSLog在设置标志后(在另一种方法中)放置一行,然后在while()看似随机的后面的一行在几秒钟的两个日志语句之间等待.

在较慢或较快的机器上,延迟似乎没有差别,但在运行之间的延迟至少在几秒到10秒之间不同.

我使用以下代码解决了这个问题,但原始代码不起作用似乎不对.

NSDate *loopUntil = [NSDate dateWithTimeIntervalSinceNow:0.1];
while (webViewIsLoading && [[NSRunLoop currentRunLoop] runMode: NSDefaultRunLoopMode beforeDate:loopUntil])
  loopUntil = [NSDate dateWithTimeIntervalSinceNow:0.1];
Run Code Online (Sandbox Code Playgroud)

使用此代码时,设置标志时和while循环后的日志语句现在始终小于0.1秒.

任何想法为什么原始代码表现出这种行为?

macos cocoa objective-c

39
推荐指数
5
解决办法
5万
查看次数

如何在故事板中手动切换UIViewControllers?

我只需要UIView使用代码手动查看同一故事板文件中的控制器.我使用故事板制作所有表格和连接.我的应用程序在导航控制器中启动,它为我提供了访问UIView(LoginViewController)然后它转到标签栏控制器,它提供4 UIViews.根据每个UIView.h.m文件.我知道segue方法,很简单,但我需要手动方法.也许我做错了什么.

我试图使用此方法推送视图控制器IBAction:

[self.view pushViewController:LoginViewController animated:YES];
Run Code Online (Sandbox Code Playgroud)

但它出错了:

意外的接口名称'LoginViewController':预期的表达式

花了很多时间才弄清楚出了什么问题,但我没有成功.这是我的RollEnemyController.m档案:

//  RollEnemyController.m
#import "RollEnemyController.h"
#import "LoginViewController.h"
@implementation RollEnemyController;
@synthesize AttackButtonPressed;

- (IBAction)AttackButtonPressed:(id)sender {
    LoginViewController* controller = [[LoginViewController alloc] initWithNibName:@"LoginViewController"  bundle:nil];
    [self.view pushViewController:controller];
}

@end
Run Code Online (Sandbox Code Playgroud)

这是头文件:

//  RollEnemyController.h

#import <UIKit/UIKit.h>

@interface RollEnemyController : UIViewController

- (IBAction)RollButtonPressed:(id)sender;
@property (weak, nonatomic) IBOutlet UIButton *AttackButtonPressed;

@end
Run Code Online (Sandbox Code Playgroud)

iphone xcode uiviewcontroller ios ios5

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

避免,发现和消除Cocoa中的内存泄漏

内存(和资源)泄漏发生.你怎么确定他们没有?

您会建议哪些提示和技巧可以帮助避免首先造成内存泄漏?

一旦您的应用程序泄漏,您如何追踪泄漏源?

(哦,请避免"只使用GC"答案.在iPhone支持GC之前,这不是一个有效的答案,即便如此 - 可能会泄漏GC上的资源和内存)

memory debugging macos cocoa objective-c

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

在Cocoa中使用自动释放的成本是多少?

大多数Apples文档似乎都避免使用自动释放的对象,尤其是在创建gui视图时,但我想知道使用自动释放对象的成本是多少?

UIScrollView *timeline = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 20, 320, 34)];
[self addSubview:timeline];
[timeline release];
Run Code Online (Sandbox Code Playgroud)

最终我应该使用一个策略,其中所有内容都是自动释放的,并且使用retain/release应该是特定情况的规则的例外吗?或者我通常应该使用自动释放的retain/release是来自[NSString stringWithEtc ...]等便利方法的返回对象的例外吗?

cocoa memory-management objective-c

11
推荐指数
6
解决办法
8086
查看次数