静态方法与实例方法

静态方法与实例方法

方法是类的行为,写在接口和实现两个文件中。在接口部分声明方法,在实现部分实现方法。
1、类方法与实例方法
Objective-C中的类可以声明两种类型的方法:实例方法和类方法。实例方法就是一个方法,它在类的一个具体实例的范围内执行。也就是说,在你调用一个实例方法前,你必须首先创建类的一个实例。而类方法,比较起来,也就是说,不需要你创建一个实例。
+表示类方法,就是类调用方法,不依赖与任何对象的方法,类似于c语言的static关键字 static函数。-表示是实例(对象)方法,只能是对象可调用,依赖与任何对象的方法。
总结一下几点:
(1)类(static)方法(便利构造器)
a. 类方法的调用
[类名称 类方法名称];
这里需要注意:
1、类方法可以调用类方法。
2、类方法不可以调用实例方法,但是类方法可以通过创建对象来访问实例方法。
3、类方法不可以使用实例变量。类方法可以使用self,因为self不是实例变量。
4、类方法作为消息,可以被发送到类或者对象里面去(实际上,就是可以通过类或者对象调用类方法的意思)。
(2)实例方法
a.实例方法的调用
首先需要实例化该类
例如:Human *man = [Human alloc] init];
[类的实例 

实例方法名称];
例如:[man showSex];   
注意:此处实例化该类时,调用了该类的构造函数init,并且该类的构造函数调用[super init]的返回值不等于该类的self。
定义子类的实例
Woman *wife = [Woman alloc] init];
此处实例化该类时,调用了该类的构造函数init,并且该类的构造函数调用[super init]的返回值 等于该类的self。
2、单例模式
Singleton模式,即单例模式。顾名思义,主要用于做应用程序的资源共享控制。实质为,单例是在程序声明周期里有且仅有被实例化过一次的类。为确保 实例化的唯一,利用类的类(static)方法来生成和访问对象。至此,我们可以在程序中任何地方访问类的单例对象,因为只实例化唯一的一次,所以,并不 用 alloc、init、autorelease初始化方法。
单例设计模式的要点:
(1) 某个类只能有一个实例。  
(2)他必须自行创建这个对象  
(3)必须自行向整个系统提供这个实例;
(4)这个方法必须是一个静态类;
.m文件代码(记住)
@implementation Singleton
static Singleton *st;
+(Singleton*) instance{//可用id代替返回可用的指针对象 instance是方法名
//静态变量,生命周期是整个程序,在下一次该函数调用时仍可使用 。?    if(st==nil ) {//指针为空就创建?         st = [[Singleton alloc] init];
//指针st指向单例模式 Singleton
      }
    return st;//不是空就继续使用
}
@end
注意:所谓单例,即我们自己创建一个单例类,该类只能生成唯一的对象,为了防止该对象被复制(copy)或者retain 和 release 等操作,我们必须在所创建的单例的实现文件( .m 文件)中将父类的这些方法给覆盖,该目的是为了保证单例模式的一个严谨性。
 
### 静态方法实例方法的区别及用法 在面向对象编程中,静态方法实例方法是两种重要的方法类型。以下是它们的主要区别用法: #### 定义调用方式 - **静态方法**:属于类本身的方法类的实例无关。可以通过类名直接调用,无需创建类的实例。例如,在Java中,可以使用`ClassName.staticMethod()`调用静态方法[^1]。在Python中,通过`@staticmethod`装饰器定义静态方法,并且可以直接通过类名调用[^3]。 - **实例方法**:类的实例相关联的方法。必须先创建类的实例,然后通过这个实例来调用方法。例如,在Java中,需要先创建一个对象`Object obj = new Object();`,然后通过`obj.instanceMethod()`调用实例方法[^1]。 #### 内存分配加载时机 - 静态方法实例方法在内存中都只保存一份,所有方法都会保存在一个特定的区域[^2]。两者在加载时机上一致,都是在类型第一次被使用时加载,调用速度基本没有差别。 #### 逻辑关系 - **静态方法**:类本身相关,不依赖于具体的对象实例。如果一个方法其所在类的实例对象无关,则应将其声明为静态方法[^2]。例如,工具类中的方法通常设计为静态方法,因为它们不需要面向对象的理念。 - **实例方法**:具体的对象实例相关。当方法需要访问或操作对象的状态(即实例变量)时,应将其声明为实例方法[^4]。 #### 示例代码 以下是一个Java示例,展示了静态方法实例方法的定义调用: ```java public class Example { public String instanceVariable = "Instance Variable"; // 实例方法 public String instanceMethod() { return "This is an instance method. Instance variable: " + instanceVariable; } // 静态方法 public static String staticMethod() { return "This is a static method."; } public static void main(String[] args) { // 调用静态方法 System.out.println(Example.staticMethod()); // 输出"This is a static method." // 创建实例并调用实例方法 Example example = new Example(); System.out.println(example.instanceMethod()); // 输出"This is an instance method. Instance variable: Instance Variable" } } ``` 以下是一个Python示例,展示了静态方法实例方法的定义调用: ```python class Example: def __init__(self, instance_variable): self.instance_variable = instance_variable # 实例方法 def instance_method(self): return f"This is an instance method. Instance variable: {self.instance_variable}" # 静态方法 @staticmethod def static_method(): return "This is a static method." # 调用静态方法 print(Example.static_method()) # 输出"This is a static method." # 创建实例并调用实例方法 example = Example("Instance Variable") print(example.instance_method()) # 输出"This is an instance method. Instance variable: Instance Variable" ``` #### 适用场景 - **静态方法**:适用于类本身相关的操作,而不涉及具体对象的状态。例如,数学计算、字符串处理等工具方法[^2]。 - **实例方法**:适用于需要操作对象状态或行为的场景。例如,获取或修改对象的属性值[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值