1、问题
在Objective-C中,你可以给类或对象发消息来完成任务。如果你想要你的自定义类能够响应消息,那就需要编写一个class方法。
2、解决方案
要添加class方法,你需要在头文件中添加forward声明。class方法以+开头,还要有一个返回类型,如(void),之后是一组参数描述符,数据类型,以及参数名。class方法要在类实现文件中实现,放在@implementation关键字后面。
3、原理
下面是一个class方法的forward declaration:
+(void) writeDescriptionToLogWithThisDate:(NSDate *)date;
然后到.m文件中实现该方法:
+(void)writeDescriptionToLogWithThisDate:(NSDate *)date{
NSLog(@"Today's date is %@ and this class represents a car", date);
要使用该方法,你只需要向该Car类发一个消息,无需担心先要实例化一个对象。
[Car writeDescriptionToLogWithThisDate:[NSDate date]];
}
4、代码
Listing 1-10. Car.h
#import <Foundation/Foundation.h>
@interface Car : NSObject
@property(strong) NSString *name;
+(void)writeDescriptionToLogWithThisDate:(NSDate *)date;
@end
======================================================
Listing 1-11. Car.m
#import "Car.h"
@implementation Car
@synthesize name;
+(void)writeDescriptionToLogWithThisDate:(NSDate *)date{
NSLog(@"Today's date is %@ and this class represents a car", date);
}
@end
============================================================
Listing 1-12. main.m
#import "Car.h"
int main (int argc, const char * argv[]){
@autoreleasepool {
[Car writeDescriptionToLogWithThisDate:[NSDate date]];
}
return 0;
}
class方法就像Java中的静态方法。
相关推荐
JDK 1.6的反射API包括Class类、Constructor类、Method类等。源码分析有助于理解如何动态调用方法、创建对象以及访问私有成员。 6. **异常处理** 深入源码,可以了解Java异常处理机制,包括try-catch-finally结构、...
7. **Class 系统**:Prototype 引入了类的概念,允许创建有构造函数和原型链的类,如 `Function.prototype.create()` 和 `Class.create()`。 8. **JSON 支持**:Prototype 提供了 JSON 解析和序列化的方法,如 `...
在Mac操作系统中,由于默认可能不包含这个源码文件,所以当开发者需要查看或分析Java标准库的源代码时,就需要手动添加`src.zip`。通过将这个压缩包解压并导入到IDE(如Eclipse或IntelliJ IDEA)中,开发者可以方便...
- **反射**:通过Class、Constructor、Method等类进行运行时类型检查和对象操作。 ### 3. 枚举与注解 JDK1.6引入了枚举(enum)类型,提供了一种更安全的方式来表示一组固定的常量,防止值的误用。同时,注解...
这个库包含了多种类和接口,如ClassGen、Method、Field等,它们提供了访问和操作Java字节码的方法。通过BCEL,开发者能够实现诸如性能优化、代码分析、类转换等复杂任务。例如,可以使用BCEL来插入或删除方法调用,...
- **Class类**:代表运行时的类信息,可以动态获取类的方法和字段。 - **Constructor/Method/Field**:分别表示类的构造函数、方法和字段。 7. **注解** - **@Override**:表明方法覆盖父类方法。 - **@...
这个简单的程序展示了 C# 语言的基础结构:`using` 指令导入命名空间,类 (`class`) 定义,以及主方法 (`Main` 方法) 的定义。 ##### 1.2 程序结构 C# 程序由一个或多个命名空间组成,每个命名空间包含一系列类。...
java.lang.reflect包提供了Class、Constructor、Method、Field等类来实现反射操作。 八、国际化 java.text和java.util包提供了日期时间、数字格式化、货币转换、消息资源管理等功能,支持全球化和本地化应用开发。 ...
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"> <!-- 添加其他已经存在的转换器 --> ``` 这段配置告诉Spring MVC使用Joda-Time的`...
- `Class类`: 代表类的对象,允许在运行时动态获取类的信息并创建对象。 - `Method类`: 代表类的方法,可以动态调用方法。 - `Constructor类`: 代表类的构造器,用于动态实例化对象。 8. **国际化** - `...
- **举例**: 对于自定义类,通常需要重写`equals`方法以便正确地比较对象内容。 **1.12 静态变量与实例变量的区别** - **知识点**: 静态变量属于类,所有对象共享同一份副本;实例变量属于对象,每个对象都有其独立...
其中,`com.example.MyInterceptor`是你自定义的拦截器实现类,`logLevel`是传递给`setProperties`方法的属性名,`DEBUG`是其对应的值。 #### 1.5 Mybatis可拦截的方法 Mybatis提供了多种类型的对象可以被拦截,...
6.1.3 使用自定义的Car类 136 6.1.4 类和对象 139 6.1.5 源文件的存放 141 6.1.5 理解引用 143 6.1.7 null关键字 145 6.2 巧妙使用类中的属性 147 6.2.1 在类中给每个变量一个初始值 147 6.2.2 定义自己的...
6.1.3 使用自定义的Car类 136 6.1.4 类和对象 139 6.1.5 源文件的存放 141 6.1.5 理解引用 143 6.1.7 null关键字 145 6.2 巧妙使用类中的属性 147 6.2.1 在类中给每个变量一个初始值 147 6.2.2 定义自己的...
在Mybatis框架中,拦截器(Interceptor)是一个重要的组件,它允许开发者在不修改框架核心逻辑的情况下,添加自定义的行为。例如,可以在SQL执行前后添加日志记录、性能监控等逻辑。本文将详细介绍Mybatis拦截器的...
如果Bean中存在多个重载的方法,即方法名相同但参数类型或个数不同的方法时,可以通过在replaced-method元素下添加arg-type元素来指定要替换方法的具体参数类型: ```xml <bean id="beanAReplacer" class=...
- **静态嵌套类(Static Nested Class)**:类似于内部类,但不需要外部类实例。 **1.27 内部类可以引用它的包含类的成员吗?有没有什么限制?** 内部类可以直接访问外部类的成员,即使它们是私有的。但外部类不能...
通过这次实验,我们不仅掌握了Java环境的搭建,还理解了Java程序的基本结构,包括公共类(public class)、主方法(main method)以及输出语句(System.out.println)。同时,也学会了如何利用IDE(Eclipse)进行更...
- **方法调用**:介绍如何使用Method类来调用类的方法。 - **非公有方法**:讨论如何调用类的非公有方法。 #### 1.14 用反射方式反射类中的 main 方法 - **反射调用**:演示如何使用反射技术调用类中的main方法。 ...
- **查看类定义和继承情况**:介绍了如何使用`class()`和`superClass()`函数来查看类的定义和继承结构。 - **创建类的实例与初始化**:讲解了如何创建类的实例以及初始化的过程。 - **定义和查看使用新类的函数方法*...