黑马程序员——OC-10:核心语法

————————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


Student类继承Person类

#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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值