小编nev*_*ing的帖子

目标C中的延迟加载

我听说延迟加载技术对提高程序性能非常有帮助.我正在为iPhone开发游戏.我不确定如何在目标C中应用延迟加载.有人能告诉我这个例子吗?

提前致谢

iphone objective-c

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

CGContextSaveGState和CGContextRestoreGState的目的是什么?

我看到他们使用的大量示例代码CGContextSaveGStateCGContextRestoreGState.为什么我需要保存上下文的状态?

core-graphics

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

在NSString的isa指针上使用"setValue:forKey:"然后调用[string class]时出错

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"我只是想弄清楚是否可能有某种方法可以做到这一点.

objective-c objective-c-runtime nsstring

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

UINavigationController状态恢复(没有故事板)

我一直在四处寻找状态恢复.在下面的代码中,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)

ios ios6 state-restoration

18
推荐指数
1
解决办法
7325
查看次数

覆盖子类中的readonly属性

有一个类看起来像这样(我为了简洁省略了导入):

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)

properties objective-c

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

如何设置UISegmentedControl的默认状态?

有没有办法在Interface Builder中的UISegmentedControl中设置起始选定的段,或者我是否必须在代码中执行此操作?如果它在代码中,viewDidLoad是设置它的最佳位置吗?

iphone cocoa-touch objective-c interface-builder

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

如何减少地图上的注释数量?

我正在编写一个包含大约900个注释的地图视图.在地图上有这么多注释会使性能受损,所以我想一次将它减少到大约300个.注释代表一个国家的商店,因此它们倾向于在主要城市周围聚集很多,然后在小城镇中以2或3个小组聚集.我想减少数字,以便2或3组保持不变,但城市中的数字变得稀疏(它们非常接近,因此它们没有提供有用的信息).

在图像中你可以看到有几个大团体(东京,名古屋和大阪),我想要减肥.但是对于自己或小组的引脚,我想确保它们不被过滤.放大后,我想显示丢失的针脚.

有没有人知道我可以使用的一些好的代码,以便消除那些靠近在一起的点,但更多分散的点是独自留下的?

替代文字http://img.skitch.com/20100204-jpde6wugc94nn692k7m36gmqf1.jpg

iphone algorithm cocoa-touch objective-c mkmapview

17
推荐指数
3
解决办法
5544
查看次数

为什么我不能设置按钮的阴影颜色?

我正试图在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

谢谢.

iphone cocoa-touch objective-c shadow uibutton

16
推荐指数
1
解决办法
9510
查看次数

为什么Objective-C使用方括号作为消息?

我正在读一本关于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的?这是一种风格选择吗?它能为您提供更多选择吗?还有其他原因吗?

syntax smalltalk objective-c

15
推荐指数
2
解决办法
3932
查看次数

iOS 13中未调用应用程序委托方法

我正在使用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)

xcode uiapplicationdelegate ios ios13 uiscenedelegate

15
推荐指数
3
解决办法
6320
查看次数