我听说延迟加载技术对提高程序性能非常有帮助.我正在为iPhone开发游戏.我不确定如何在目标C中应用延迟加载.有人能告诉我这个例子吗?
提前致谢
我看到他们使用的大量示例代码CGContextSaveGState
和CGContextRestoreGState
.为什么我需要保存上下文的状态?
Heres是我得到的错误.
libobjc.A.dylib`_objc_trap():
0x14c13f4: pushl %ebp
0x14c13f5: movl %esp, %ebp
0x14c13f7: ud2
Run Code Online (Sandbox Code Playgroud)
所以基本上我试图理解如何NSString
工作并试图找到一种方法来改变指向"真(char*)字符串"的指针,这被称为常量.
所以,我发现有一个名为isa的指针指向(__NSCFConstantString *
).它让我想到,如果我改变那个指针,那么我可以改变字符串.
我试过的代码是这样的:
NSString *st3 = [[NSString alloc] initWithString:@"hihi"];
[st3 setValue:@"change" forKey:@"isa"];
Run Code Online (Sandbox Code Playgroud)
并且,结果表明
之前:
后:
它似乎改变了,但它改变了每个NSString
具有@"hihi"字符串的对象.
然后我做的是[st3 class]希望它会给出isa
指针然后我在顶部发布了错误消息.
你能解释一下发生了什么以及为什么会这样吗?而且,有没有办法实习(我不太确定这个术语)就像在Java中一样?
请避免说只使用"NSMutableString"我只是想弄清楚是否可能有某种方法可以做到这一点.
我一直在四处寻找状态恢复.在下面的代码中,UITableViewController的滚动位置被恢复,但是,如果我要进入详细视图(将MyViewController的实例推入导航堆栈),当应用程序重新启动时,它总是返回到第一个视图导航堆栈中的控制器(即MyTableViewController).有人能帮我恢复到正确的视图控制器(即MyOtherViewController)吗?
AppDelegate.m
- (BOOL)launchWithOptions:(NSDictionary *)launchOptions
{
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.
MyTableViewController *table = [[MyTableViewController alloc] initWithStyle:UITableViewStylePlain];
table.depth = 0;
UINavigationController *navCon = [[UINavigationController alloc] initWithRootViewController:table];
navCon.restorationIdentifier = @"navigationController";
self.window.rootViewController = navCon;
self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];
});
return YES;
}
- (BOOL)application:(UIApplication *)application willFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
return [self launchWithOptions:launchOptions];
}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
return [self launchWithOptions:launchOptions];
}
Run Code Online (Sandbox Code Playgroud)
MyTableViewController.m
- (id)initWithStyle:(UITableViewStyle)style …
Run Code Online (Sandbox Code Playgroud) 有一个类看起来像这样(我为了简洁省略了导入):
Base.h:
@interface Base : NSObject
@property (strong, readonly) NSString *something;
- (id)initWithSomething:(NSString *)something;
@end
Run Code Online (Sandbox Code Playgroud)
Base.m:
@implementation Base
- (id)initWithSomething:(NSString *)something {
self = [super init];
if (self) _something = something;
return self;
}
@end
Run Code Online (Sandbox Code Playgroud)
如你所见,'something'属性是readonly.现在我想创建一个子类来覆盖该属性也是可写的:
Sub.h:
@interface Sub : Base
@property (strong) NSString *something;
@end
Run Code Online (Sandbox Code Playgroud)
Sub.m:
@implementation Sub
@end
Run Code Online (Sandbox Code Playgroud)
和代码:
main.c中:
int main(int argc, const char * argv[]) {
@autoreleasepool {
Sub *o = [Sub new];
o.something = @"foo";
NSLog(@"%@", o.something);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
此代码导致:
2013-09-07 13:58:36.970 ClilTest[3094:303] …
Run Code Online (Sandbox Code Playgroud) 有没有办法在Interface Builder中的UISegmentedControl中设置起始选定的段,或者我是否必须在代码中执行此操作?如果它在代码中,viewDidLoad是设置它的最佳位置吗?
我正在编写一个包含大约900个注释的地图视图.在地图上有这么多注释会使性能受损,所以我想一次将它减少到大约300个.注释代表一个国家的商店,因此它们倾向于在主要城市周围聚集很多,然后在小城镇中以2或3个小组聚集.我想减少数字,以便2或3组保持不变,但城市中的数字变得稀疏(它们非常接近,因此它们没有提供有用的信息).
在图像中你可以看到有几个大团体(东京,名古屋和大阪),我想要减肥.但是对于自己或小组的引脚,我想确保它们不被过滤.放大后,我想显示丢失的针脚.
有没有人知道我可以使用的一些好的代码,以便消除那些靠近在一起的点,但更多分散的点是独自留下的?
替代文字http://img.skitch.com/20100204-jpde6wugc94nn692k7m36gmqf1.jpg
我正试图在UIButton上设置阴影颜色,但我似乎能得到的只是中灰色.
UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
button.frame = CGRectMake(20, 20, 200, 100);
[button setTitle:@"a" forState:UIControlStateNormal];
[button addTarget:self
action:@selector(buttonPressed:)
forControlEvents:UIControlEventTouchUpInside];
[button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
[button.titleLabel setFont:[UIFont fontWithName:@"Helvetica" size:96]];
// set up the button colours
button.titleLabel.shadowColor = [UIColor blueColor];
[button.titleLabel setShadowOffset:CGSizeMake(5.0f, 5.0f)];
[self.view addSubview:button];
Run Code Online (Sandbox Code Playgroud)
替代文字http://img.skitch.com/20090825-xur3112ni5q2wrwwiix4jbcwc5.png
我设置了错误的属性,还是我设置错误的方式shadowColor
?
谢谢.
我正在读一本关于Smalltalk的书(Charmond Liu的Smalltalk,Objects and Design).他讲述了如何使用HomeBudget
对象在Smalltalk中使用消息作为如何使用多个参数发送单个消息的示例:
HomeBudget spend: 229 on: 'VCR'
Run Code Online (Sandbox Code Playgroud)
Objective-C使用Smalltalk的许多想法,例如消息传递对象和冒号作为参数,但始终用方括号括起消息.同样的电话会是:
[homeBudget spend:229 on:@"VCR"];
Run Code Online (Sandbox Code Playgroud)
为什么Objective-C使用方括号(而不是像Smalltalk那样留下消息)?它是否需要语法,因为它是基于C的?这是一种风格选择吗?它能为您提供更多选择吗?还有其他原因吗?
我正在使用Xcode 11并为iOS 13构建应用程序。在Xcode中创建的新项目中,缺少一些UIApplicationDelegate方法,因此我将它们重新添加到了应用程序委托文件中。“单视图应用程序”项目的新模板缺少这些方法。问题在于,除了之外,没有其他任何委托方法被调用-application:didFinishLaunchingWithOptions:
。这是我的应用程序委托:
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
NSLog(@"application:didFinishLaunchingWithOptions:");
return YES;
}
- (void)applicationDidEnterBackground:(UIApplication *)application {
NSLog(@"applicationDidEnterBackground:");
}
- (void)applicationWillEnterForeground:(UIApplication *)application {
NSLog(@"applicationWillEnterForeground:");
}
#pragma mark - UISceneSession lifecycle
- (UISceneConfiguration *)application:(UIApplication *)application configurationForConnectingSceneSession:(UISceneSession *)connectingSceneSession options:(UISceneConnectionOptions *)options {
return [[UISceneConfiguration alloc] initWithName:@"Default Configuration" sessionRole:connectingSceneSession.role];
}
- (void)application:(UIApplication *)application didDiscardSceneSessions:(NSSet<UISceneSession *> *)sceneSessions {
}
@end
Run Code Online (Sandbox Code Playgroud) objective-c ×7
iphone ×4
cocoa-touch ×3
ios ×2
algorithm ×1
ios13 ×1
ios6 ×1
mkmapview ×1
nsstring ×1
properties ×1
shadow ×1
smalltalk ×1
syntax ×1
uibutton ×1
xcode ×1