黑马程序员——oc核心语法1

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
  1. 点语法:对象调用方法
   
  上述完整方法为- (void)setAge:(int)age;
  1> 如何判断set和get方法:
        如果赋值,则是set方法。
                 eg:stu.age = 10;
        否则是get方法。
                  eg :  int age = stu.age;
 2>注意:一定要与访问成员变量区分:
       访问成员变量:p->_age;

2.成员变量作用域
    @public:任何地方都可以直接访问(任何地方直接访问)
             直接访问:p->_age=20;
    @private:只能在当前类的对象中访问(当前类的对象直接访问,成员属性属于哪个类,则只有那个类可以访问)
               eg:
                 
<span style="font-size:14px;">@interface Person : NSObject  // 声明Person类
                       {
                          @private
                           int _age; // _age属性只能被Person类访问
                       }
                     - (void)setAge:(int)age; // age属性的setter和getter方法
                     - (int)age;
                 @end
                 @implementation Person  // 实现Person类
                - (void)setAge:(int)age
                       {
                              _age=age;
                          } 
                 - (int)age
                     {
                          return _age;
                        }
                 @end
                 @interface Student : Person (定义student类,继承Person类)
                   - (void)study; // 声明学习的方法
                 @end
                 @implementation Student  // 实现Student类
                  - (void)study
                    {
                      [self setAge:20]; // 通过setter方法访问父类的私有对象
                    }
                  @end</span>

           注意点:如果子类访问此属性,则只能通过setter和getter方法访问。
    @protected:可以在当前类以及子类中对象访问(当前类和子类的对象直接访问,默认)
    @package:在同一框架中可以访问,介于@private和@public之间
注:
 (1)在@interface声明中自定义变量类型是 @protected
 (2)在@implementation实现中自定义变量类型是 @private
               
 eg: <span style="white-space:pre">			</span>@implementation Person
                           {
                              int _age; // 此对象是私有的
                             }
                      @end

 (3)@implementation不能定义和@interface同名的成员变量

3.@property 和 @synthesize
   1>@property: 
    可以自动生成某个成员变量的setter和getter的方法声明
    eg:@property int age;  // 会自动生成_age成员变量
     // int是get方法的返回值类型和set方法的形参类型。 age是set形参名和get的方法名
      自动生成 - (void)setAge:(int)age;
                     - (int)age;

 2>@synthesize 
   自动生成set方法和get方法的实现,并且会访问_age这个成员变量
   eg:@synthesize age = _age; // 代表形参age会访问_age这个成员变量,如果无_age,则会自动生成
         @synthesize age; // 代表默认访问age成员变量,如果没有,则自动生成age成员变量
   //如果_age在类中不存在,则会自动生成@private类的age
   注:1.如果手动实现了setter方法,则编译器就只会自动生成getter方法
             如果手动实现了getter方法,则编译器自动生成setter方法方法

3>注意点
    (1)方法调用时,会优先调用手工编写的方法,如果没找到再调用自动生成的方法。
    (2)@property会自动生成_成员变量名。
                eg: @property age; // 自动生成_age,类型是@private;
             @synthesize 会自动生成 成员变量名。
                   eg: @synthesize age; // 自动生成age,类型是@provate;
    (3)重点例子:
               
 <span style="white-space:pre">		</span>@interface Person : NSObject // 声明Person类
                @property int age; 
                @end
                @implementation Person
                @end

          解析:@property int age代码有如下三个作用:
                     1>生成_age成员变量。
                     2>声明 _age成员变量的setter和getter方法
                     3>实现_age成员变量的setter和getter方法
              
4. id
   概念:万能指针,能指向或操作任何OC对象。(已经包含了* ,在调用时不需要加*)
    相当于NSObject  *

   eg:   id d= [student new]; // 使用student类创建对象d
        或者 NSObject *d = [student new]; // 多态语法
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值