相关疑难解决方法(0)

在@implementation而不是@interface定义的类变量?

我是Objective-C的新手,但我很好奇我在其他任何地方都没有看过的东西.

谁能告诉我在@interface块中声明的私有变量与@implementation在类方法之外的块中声明的变量之间的区别是什么,即:

@interface Someclass : NSObject {

 NSString *forExample;

}

@end
Run Code Online (Sandbox Code Playgroud)

@implementation Someclass

 NSString *anotherExample;

-(void)methodsAndSuch {}

@end
Run Code Online (Sandbox Code Playgroud)

似乎两个变量(forExample,anotherExample)在整个班级中都可以同等地访问,我无法真正发现他们的行为有所不同.第二种形式也称为实例变量吗?

objective-c

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

目标C:在实现文件中声明的带有IVars的ARC

我发现了一篇有趣的文章,描述了如何在Objective-C 2.0中,在实现文件中声明实例变量.考虑这个例子:

@interface MyClass {}
@end

@implementation MyClass {    
  NSObject *obj1;
  NSObject *obj2;
}
@end
Run Code Online (Sandbox Code Playgroud)

注意实例变量obj1,并obj2声明的属性.由于它们未使用@property语句声明,因此没有相应的所有权限定符,例如weak/ strong.

我的问题是,使用自动引用计数(ARC)的项目是否记得清理以这种方式声明的对象?任何解决这一具体问题的文件都将受到赞赏.

instance-variables objective-c-2.0 automatic-ref-counting

10
推荐指数
1
解决办法
1445
查看次数

@implementation中声明的变量

我正在处理一本书中的代码清单,它有一对变量(特别是NSString*)在@implementation中声明和初始化,而不是@interface,但在任何方法体之外.我以前没见过这个,我想知道这在范围上有什么不同等等.

我已经快速浏览了Objective C Programming Language,但我看不出有什么描述它有什么影响.

谢谢

安迪

objective-c

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

UIViewController子类不能赋值实例变量

这让我感到非常困惑,让我觉得我错过了一些必不可少的东西.但我正在尝试创建一个视图控制器容器来管理两个窗格(类似于SplitViewController,但有一些重要的区别).我几乎没有开始构建课程,所以我现在只有3个iVars:

@implementation SplitViewController{
    BOOL _showLeftPane;
    UIViewController *_leftController;
    UIViewController *_rightController;
}
Run Code Online (Sandbox Code Playgroud)

无论我做什么,我都无法将视图控制器分配给_leftController iVar.大多数情况下,_rightController iVar可以分配.它变得怪异了.如果我切换iVars的顺序,所以_rightController出现在_leftController之前,我不能在第一次尝试时分配任何一个.但是,如果我再次尝试(字面上写两次赋值),_leftController将采取.一直以来,当我使用控制台在分配后立即请求iVar声明中列出的第一个控制器的值时,我得到的值是(UIViewController *) $5 = 0x00000001 [no Objective-C description available].WTF?

出于好奇(因为我可以...我几乎没有开始编写类)我将super从UIViewController更改为NSObject.当我这样做时,分配工作.实际上,除了在loadView上创建一个空白视图之外,赋值就是这个类现在所做的一切.

我错过了什么?

更新 代码的其余部分:

整个.h文件:

#import <UIKit/UIKit.h>

@interface SplitViewController : UIViewController

@property (strong) UIViewController *leftViewController;
@property (strong) UIViewController *rightViewController;
@end
Run Code Online (Sandbox Code Playgroud)

整个.m文件(注意,我尝试过合成属性,相同的行为,除了从控制台调试更难):

@implementation SplitViewController{
    BOOL _showLeftPane;
    UIViewController *_rightNavController;
    UIViewController *_leftNavController;
}
#pragma mark - Init Methods
- (id)init{
    if (self = [super initWithNibName:nil bundle:nil]){
        _showLeftPane = YES;
    }
    return self;
}
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil{
    self = …
Run Code Online (Sandbox Code Playgroud)

subclass objective-c uiviewcontroller ios

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