Defining Classes
Classes Are Blueprints for Objects
类是对象的模板
In Objective-C, the class interface specifies exactly how a given type of object is intended to be used by other objects. In other words, it defines the public interface between instances of the class and the outside world.
定义interface就是做个连接类和外部的部件
类的interface就是这个类的定义
别人用这个interface来使用你定义好的类
interface一般写在.h里面给其他的文件引用
类的定义和interface的定义是绑定在一起的
Mutability Determines Whether a Represented Value Can Be Changed
可变和不可变的值
Some classes define objects that areimmutable. in Objective-C, all basicNSStringandNSNumberobjects are immutable.
一些对象的值是不可变的,在OBJECT-c里 所有basic类型如nsstring和nsnumber都是不可变的,类似C语言中的const
Some immutable classes also offer amutableversion.
you can usean instance of theNSMutableStringclass. Instances of this class behave just likeNSStringobjects
一些对象的值是可变的,比如继承于NSString的NSMutableString就是可变的对象,可以对其值进行操作·
Classes Inherit from Other Classes
一个类继承与其他类
All of the functionality provided by NSString is available in NSMutableString
比如nsMutableString继承于NSString,NSMutableString可以使用所有NSString的函数
The Root Class Provides Base Functionality
The Interface for a Class Defines Expected Interactions
an object should be designed tohide the details of its internal implementation.
一个类的定义是为了隐藏他的内部实现
In Objective-C, the interface and implementation are usuallyplaced in separate files so that you only need to make the interface public.
Basic Syntax
@interface SimpleClass : NSObject
//定义内容
@end
Properties Control Access to an Object’s Values
定义属性
@interface Person : NSObject
@property NSString *firstName;//属性firstName(*代表是个C指针) @property NSString *lastName;//属性lastName(*代表是个C指针)
@property NSNumber *yearOfBirth;
@property int yearOfBirth; //int类型的属性
@end
Property Attributes Indicate Data Accessibility and Storage Considerations
属性的访问及存储权限
@interface Person : NSObject
@property (readonly) NSString *firstName;//只读的属性
@property (readonly) NSString *lastName;//只读的属性
@end
Method Declarations Indicate the Messages an Object Can Receive
发消息=调函数 metod就是传递messages给Object
object中的方法如下
- (void)someMethod;
The minus sign (-) at the front of the method name indicates that it is an instance method, which can be calledon any instance of the class.
(-)代表此函数是一个实例函数,能被任何本类的实例调用,(后面会说到+代表的类函数,类似静态方法)
Methods Can Take Parameters
- (void)someMethodWithValue:(SomeType)value;
- (void)someMethodWithFirstValue:(SomeType)value1 secondValue:(AnotherType)value2;
someMethodWithFirstValue 是函数名(写法是规范)
value1 参数1的形参
AnotherType 参数2的类型
value2 参数2的形参
这里没有secondValue什么事情
secondValue就是类似多态的写法
Class Names Must Be Unique
类名必须唯一
The Implementation of a Class Provides Its Internal Behavior
As stated earlier, the interface for a class is usually placed inside a dedicated file, often referred to as a headerfile, which generally has the filename extension .h. You write the implementation for an Objective-C classinside a source code file with the extension .m.
一般一个类的定义(interface)定义在一个.h文件中,一个类的实现(implementation)在一个.m文件中定义
Basic Syntax
Implementing Methods
For a simple class interface with one method, like this:
the implementation might look like this:
XYZPerson.h文件定义XYZPerson类
@interface XYZPerson : NSObject
- (void)sayHello;
@end
XYZPerson.m文件实现XYZPerson类
#import "XYZPerson.h"
@implementation XYZPerson
- (void)sayHello {
NSLog(@"Hello, World!");
}
@end
Objective-C Classes Are also Objects
obj-c类也是一个对象
The typical use for a class method is as a factory method,
使用(+)符号代表工厂方法,与前面提到的(-)相对应
The NSString class
+ (id)string;
+ (id)stringWithString:(NSString *)aString;
+ (id)stringWithFormat:(NSString *)format, ...;
+ (id)stringWithContentsOfFile:(NSString *)path encoding:(NSStringEncoding)enc
error:(NSError **)error;
+ (id)stringWithCString:(const char *)cString encoding:(NSStringEncoding)enc;