随着新手大量涌入Xcode,我确信有很多Xcode提示和技巧可供分享.
你的是什么?
作为正在阅读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.
我希望能够通过我的应用程序中的任何位置引用某些状态/对象.例如,用户登录到他们的应用程序,我需要调用Web服务并检索用户信息.然后,我希望能够从应用程序的任何位置访问此信息,如下所示:
myAppDelegate *delegate = [[UIApplication sharedApplication] delegate];
user = delegate.u;
Run Code Online (Sandbox Code Playgroud)
是否在应用程序委托中将实例变量设置为User对象,并在需要时从那里引用它是一种糟糕的方式来实现它?我通常根据用户的登录设置它.
想听听专业人士如何处理这个.
我刚刚听说iphone不能原生地加倍,从而使它们比常规漂浮慢得多.
这是真的?证据?
我对这个问题很感兴趣,因为我的程序需要高精度计算,而且我必须在速度上妥协.
在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秒.
任何想法为什么原始代码表现出这种行为?
我只需要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) 内存(和资源)泄漏发生.你怎么确定他们没有?
您会建议哪些提示和技巧可以帮助避免首先造成内存泄漏?
一旦您的应用程序泄漏,您如何追踪泄漏源?
(哦,请避免"只使用GC"答案.在iPhone支持GC之前,这不是一个有效的答案,即便如此 - 可能会泄漏GC上的资源和内存)
大多数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 ...]等便利方法的返回对象的例外吗?