super 关键字:
1:可以直接调用父类的某个方法。
2:super 处在对象方法中,就会调用父类的对象方法。
3: super 处在类方法中,就会调用父类的类方法。
使用场合:
子类重写父类的方法时想保留父类的一些行为再加上自己想要的功能。
NSString
oc字符串也是一个对象,NSString 是oc自带的类。所有的类都要继承NSObject 这个类。
例如:
#import <Foundation/ Foundation.h>
int main ()
{
NSString *s = "Itcast";
char * name = "itcast ";
NSLog (@"%@,s");
NSLog (@"%,name");
return 0;
}
点语法
利用点语法替代set 和 get 方法。
1>: 方法调用
Student * s = [ student new ];
[ s setAge:10 ];
int age = [ s age ];
点语法:
s. age = 10;
int age = s.age;
2: 点语法的本质
点语法的本质还是方法调用 。
当使用点语法时,编译器会自动展成相应的方法。
s .age = 10;
就会展开成:
[ s setAge : 10];
int age = s. age ;
展开为:
int age = [ s age ];
死循环注意:
- void setAge : (int ) age
{
self.age = age;
}
成员变量的作用域:
1:@private : 只能在当前类的实现@implemmentation 中直接访问。
如果在属性中什么都不写,就默认为@private.
2:@protected : 可以在当前类及子类的实现@implemmentation 中直接访问。
3:@public : 任何地方都可以直接访问。
4:@package :同一个体系内可以访问,介于@private 和 @public 之间 。
它的子类也拥有同样的成员变量,但是却不能直接访问。就只能用set 和get 方法访问。
也可以在类的实现中定义成员变量,但默认为 @private 型,及时写上@ public 也没用,因为主函数所在的文件没有包含类的实现所在的文件。
在@imlementation 中定义的变量默认为 @ private
在@interface 中定义成员变量默认为 @ protected
只有在类的实现与主函数在一个文件中时。可以写@public 。可以被后面的main 函数使用。
@property 和 @ synthesize
@property Int age ;
可以展开为age 的 set 和 get 声明
等价于:- void setAge : int age ;
- (int ) age;
@ synthesize age = - age ;
可以展开为 age 的 set 和 get 方法的实现。
- void setAge : int age
{
-age= age ;
}
- (int ) age
{
return -age;
}
例如:
@interface Person : NSObject
{
int age ;
double weight;
}
- void test ;
@end
@implementation Person
- void test
{
NSLog (@'' 调用 了人的 test 函数");
}
@end
可以用@property 和 @ synthesize 替代
@interface Person : NSObject
@property int age ;
@property double weight ;
@end
@implementation Person
@ synthesize age = -age ;
@ synthesize weight = - weight ;
@end
如果在类的声明中没有定义成员变量 weight ,则@ synthesize weight = - weight;这个语句,就会自动生成- weight这个成员变量。
id
万能指针,能指向任何oc对象,相当于 NSObject *;
定义为:
typedef struct objc object
{
class isa;
} * id;
id 后不加*,因为它的内部包含了*。
构造方法
用来初始化对象的方法,是对象方法,以减号开头。
person * s = [ Person new ];
new 是一个类方法。只能由类名调用。
new 这个方法又包含了两个方法,可以把上面的语句分解为
person * s = [ [Person alloc] init ];
alloc 的作用是 分配存储空间,是类方法,只能由类名调用
init 是对象方法,作用是 初始化。
重写init 方法
- (id ) init
{
if (self = [super init] )
-age = 10;
return self ;
}
初始化分为两步:初始化父类的成员变量和属性
初始化对象的成员变量和属性
init 重写:在对象创建完毕后,成员变量马上就有一些默认值。
自定义构造方法:
一定是对象方法,一定以减号开头。
返回值是(id)类型。
方法名一般以initWith 开头。
例如:
- (id ) initWith:(int)age
{
if (self = [super init] )
{
age = 10;
}
return self ;
}
创建出来的新对象默认初始值就是10.
网友评论