Objective c 请解释课堂教学方法

Objective c 请解释课堂教学方法,objective-c,ios5,xcode4,Objective C,Ios5,Xcode4,我发现很难理解何时需要创建类方法。从我所读到的内容来看,它们对于创建新对象很重要,但我不知道如何创建。下面的类创建一个简单的黑色矩形形状。有人能告诉我如何合并一个类方法来做一些我不能用实例方法做的事情吗 形状.h #import <UIKit/UIKit.h> @interface Shape : UIView; - (id) initWithX: (int)xVal andY: (int)yVal; @end 我的答案是,当您需要执行一些实用函数/方法,而不需要对某些特定实例或

我发现很难理解何时需要创建类方法。从我所读到的内容来看,它们对于创建新对象很重要,但我不知道如何创建。下面的类创建一个简单的黑色矩形形状。有人能告诉我如何合并一个类方法来做一些我不能用实例方法做的事情吗

形状.h

#import <UIKit/UIKit.h>
@interface Shape : UIView; 
- (id) initWithX: (int)xVal andY: (int)yVal;
@end

我的答案是,当您需要执行一些实用函数/方法,而不需要对某些特定实例或对象执行操作时,类方法非常有用

例如,在我自己的代码中,我通常在结果相同的类中创建类方法,无论我可能在哪个对象上调用该方法。比如:

例如


这些方法也可以被认为是方便的方法(例如,非常像
NSString+stringWithFormat:
NSArray+arrayWithArray:
)。

我的答案是,当您需要执行一些实用函数/方法,而不需要对某些特定实例或对象执行操作时,类方法非常有用

例如,在我自己的代码中,我通常在结果相同的类中创建类方法,无论我可能在哪个对象上调用该方法。比如:

例如

这些方法也可以被视为方便的方法(例如,非常类似于
NSString+stringWithFormat:
NSArray+arrayWithArray:
)。

类方法:

  • 当您还没有实例时可以调用
  • 不在实例上操作(除非作为参数传入或由方法创建),因此无法访问任何特定实例的实例变量
  • 可以在子类中重写,与简单函数不同(在其他方面与前面的点匹配)
正如其他人所指出的,我确信您一直在使用类方法。如果没有其他内容,则
+alloc

类方法:

  • 当您还没有实例时可以调用
  • 不在实例上操作(除非作为参数传入或由方法创建),因此无法访问任何特定实例的实例变量
  • 可以在子类中重写,与简单函数不同(在其他方面与前面的点匹配)

正如其他人所指出的,我确信您一直在使用类方法。如果没有其他方法,那么类方法就是不需要对象的简单方法。因此,任何不使用其对象的实例方法都可以是类方法。必须使用类方法的唯一时间是必须在没有对象的情况下调用方法
alloc
是一个很好的例子:它创建并返回对象,因此根据定义,调用对象时没有对象

我曾经使用过的一个类方法(C++在嵌入式系统中,所以我没有代码显示)是让一个类保持一个双链表的所有对象。(这对于调试转储非常有用;在嵌入式开发中,调试工具通常只是某种

printf


该类有两个成员,它们是指向列表的第一个和最后一个元素的指针,构造函数和析构函数从列表中插入和删除对象。访问第一个和最后一个对象的函数是类方法,因为当您想要遍历对象列表但还没有对象时,可以调用这些函数。

类方法只是不需要对象的方法。因此,任何不使用其对象的实例方法都可以是类方法。必须使用类方法的唯一时间是必须在没有对象的情况下调用方法
alloc
是一个很好的例子:它创建并返回对象,因此根据定义,调用对象时没有对象

我曾经使用过的一个类方法(C++在嵌入式系统中,所以我没有代码显示)是让一个类保持一个双链表的所有对象。(这对于调试转储非常有用;在嵌入式开发中,调试工具通常只是某种

printf


该类有两个成员,它们是指向列表的第一个和最后一个元素的指针,构造函数和析构函数从列表中插入和删除对象。访问第一个和最后一个对象的函数是类方法,因为当您想要遍历对象列表但还没有对象时,可以调用这些函数。

类方法有几种用途:

  • 正如您所听到的,它们对于创建新对象至关重要。创建对象的过程分为两步:首先,使用
    +alloc
    方法为对象分配内存,然后使用通常以
    -init
    开头的实例方法初始化对象。
    +alloc
    方法必须是类方法,因为您没有可以调用它的实例;你只知道类名。
    -init
    方法应该是一个实例方法,因为
    +alloc
    返回一个实例,您希望初始化该实例特有的属性,而不是整个类。因此,您在上面的代码中先使用了类方法,然后使用了实例方法:
    UIView*shape=[[UIView alloc]initWithFrame:CGRectMake(xVal,yVal,10,10)]

  • 类方法对于检索单例或类的共享实例很有用。例如,
    NSUserDefaults
    类存储与应用程序关联的首选项和设置。在大多数情况下,人们喜欢为整个应用程序使用一组首选项,因此它有一个class方法
    +standardUserDefaults
    ,该方法返回一个
    NSUserDefaults
    实例,每个人都可以在应用程序生命周期的任何时候使用该实例来获取与应用程序相关的所有首选项。如果没有单例和类方法,就必须创建
    #import "Shape.h"
    @implementation Shape 
    - (id) initWithX:(int )xVal andY:(int)yVal {
    self = [super init];    
    UIView *shape = [[UIView alloc] initWithFrame:CGRectMake(xVal, yVal, 10, 10)];
    shape.backgroundColor = [UIColor blackColor];
    [self addSubview:shape];
    return self;
    }
    @end
    
    @interface MyAppCacheFiles
        + (NSURL *) getFileURLOfLocalCache;
    @end