1

我想知道关于self.

  1. 哪个上下文self在类方法中有变量?
  2. 为什么self.self在方法中允许init

第一的:

我们有一堂课ExampleClass

@interface ExampleClass:NSObject
@property (nonatomic,strong) NSString* a;

+(ExampleClass*)createExampleClass;

@end

@implementation ExampleClass

-(id)init{
    self = [super init];
    if(self){
        [self.self init]; #Allowed
        [self init]; #Not Allowed ?
    }

}

+(ExampleClass*)createExampleClass{
    /*do work here*/
    NSLog(@"Self: %@ \n Class: %@",self,[self class]);
}
@end

在此示例中,我们将看到如下内容:

Self: ExampleClass
Class: ExampleClass

但为什么?!

并且在init方法中[self.self init]允许,但不允许'[self init]'。

为什么会这样?

4

4 回答 4

4

在一个类方法中,self就是类。对于类[self class]只是返回self,所以self[self class]那里基本上是一样的。

调用[self init]init方法没有任何意义,它会导致无限递归。但是,您得到的编译器错误是 ARC 的限制,如果您使用self = [self init],错误会消失,但仍然没有任何意义。不过,您可以在不同的初始化方法中执行此操作,以调用指定的初始化程序。

于 2013-03-14T10:18:26.630 回答
0
  1. self在类方法中是类对象本身。

  2. NSObject具有self返回自身的方法。

        见这里:   https ://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Protocols/NSObject_Protocol/Reference/NSObject.html#//apple_ref/occ/intfm/NSObject/self

    Self: ExampleClass // 类的名称。Class: ExampleClass // 与类对象相同的元类对象的名称。

如果你打印指针地址,你会看到两个对象是不同的。

这是很好的插图和描述。 http://www.sealiesoftware.com/blog/archive/2009/04/14/objc_explain_Classes_and_metaclasses.html

于 2013-03-14T10:17:19.687 回答
0

self.self[self self]是返回的缩写self

于 2013-03-14T10:20:07.130 回答
-1

self.self.self.self.self.self也是有效的 :) 或 [[self self].self self].self.self

于 2013-12-02T19:30:53.897 回答