————————java培训、Andoroid培训、IOS培训、.Net培训、期待与您交流!————————
点语法
Person *p = [[Person alloc] init];
//点语法的本质是方法调用
p.age=10;//[p setAge:10];
int a=p.age;//[p age];
成员变量的4种类型
@private:只能在当前的implementation中直接访问
@public:任何地方都能够访问
@protected:可以在当前类以及当前子类的实现@implementation中直接访问
@pakage:同一个"体系内(框架)"可以访问,介于@private和@public之间
@interface和@implementation中不能声名同名的成员变量
</pre><pre name="code" class="objc">//在实现中定义成员变量默认是private
@implementation Car
{
int _wheels;//属于@private
}
@end
@property xcode4.4后
@property在@interface中可以自动生成某个成员变量的setter和getter方法
@property int age;
可以自动转换为
@interface Person:NSObject
- (void)setAge:(int)age;
- (int)age;
@end
@implementation Person
- (void)setAge:(int)age
{
_age=age;
}
-(int)age
{
return _age;
}
id类型
万能指针,能指向任何OC对象
id ==NSObject *
id d = [[Person alloc] init];
构造方法
构造方法:用来初始化对象的对象方法
重写构造方法的目的:为了让对象创建出来,成员变量就会有固定的默认值
创建可用对象:分配存储空间,初始化
重写构造方法的注意点
1.先调用父类的构造方法([super init])
2.在进行子类内部成员变量的初始化
重写init方法
- (id)init
{
//1.一定要调用回super的init方法
self=[super init];
if(self!=nil)
{
//初始化默认数据
_age=10;
}
return self;//返回已经初始化好的对象
}
自定义构造方法
自定义构造方法的规范
1.一定是对象方法
2.返回值是id类型
3.方法名一般以init开头
- (id)initWithName:(NSString *)name andAge:(int)age andNo:(int)no
{
//将name、age传递到父类方法中进行初始化
if(self = [super initWithName:name andAge:age])
{
_no=no;
}
//对比
if(self=[super init])
{
_no=no;
self.age=age; //若父类的成员变量名改变,会报错
self.no=no;
}
return self;//返回已经初始化好的对象
}
Student *stu = [[Student alloc] initWithName:@"jack" andAge:20 andNo:2];
分类
分类的作用:在不改变原来类内容的基础上,增加类的一些方法
使用注意:
1.分类不能增加成员变量
2.分类方法可以实现原来类中声明的成员变量
3.分类可以重新实现原来类中的方法,但是会覆盖掉原来的方法,导致原来的方法失效
4.方法调用优先级:分类(最后参加编译的分类优先)->原来类->父类
//增加NSString类方法
给NSString增加一个类方法,计算某个字符串中阿拉伯数字的个数
@interface NSString (Number)
+ (int)numerCountOfString:(NSString *)str;
@end
@implementation NSString (Number)
+ (int)numerCountOfString:(NSString *)str
{
int count=0;//定义数字计数
for(int i=0;i<str.length;i++)
{
char c = [str characterAtIndex:i];
if(c>='0'&&c<'9')
{
count++;
}
}
return count;
}
@end
int count=[NSString numberCountOfString:@"3456789dsahfkj"];
类的加载和初始化
先加载父类,在加载子类
#import "Person.h"
@implementation Person
//重写init方法
- (id)init
{
//1.一定要调用回super的init方法
self=[super init];
if(self!=nil)
{
//初始化默认数据
_age=10;
}
return self;//返回已经初始化好的对象
}
//在类被加载的时候调用
+ (void)load
{
NSLog(@"Person——load");
}
+ (void)initialize
{
NSLog(@"Person-initialize");
}
@end
#import "Student.h"
@implementation Student
+ (void)load
{
NSLog(@"Student——load");
}
//当第一次使用类的时候,就调用一次initialize方法
+ (void)initialize
{
NSLog(@"Student-initialize");
}
@end
int main()
{
[[Student alloc] init];
return 0;
}
输出:
Person——load
Student——load
Person——initialize
Student——initialize
int main()
{
[[Person alloc] init];
return 0;
}
输出:
Person——load
Student——load
Person——initialize
</pre><pre name="code" class="objc">int main()
{
return 0;
}
输出:
Person——load
Student——load