适合有java基础的同学迅速了解OC,个人喜好用代码来记笔记,看起来直观形象;
- #import <Foundation/Foundation.h>
- @interface Person : NSObject
- {
- NSString * _name;//interface中无修饰默认protected
- @protected
- int _age,_height;
- @private
- double _weight;
- @package
- BOOL _isAlive;
- }
- @property NSString name;//生成getter和setter的声明
- @property int age,height;//同种类型可以写一起,同样是分别生成
- @property double weight;
- @property BOOL isAlive;
- @end
- @implementation Person
- - (void)setName:(NSString*)name
- {
- NSLog(@"set name");
- _name=name;
- }
- //若setter,getter有部分实现,只生成未实现部分
- @synthesize name = _name;
- //也可以用,分隔写一行,生成时同样是一个一个生成getter和setter
- @synthesize age=_age , height=_height , weight=_weight , isAlive=_isAlive;
- @end
- //子类继承父类所有成员及方法,虽然子类中无法直接访问父类private成员
- //但子类仍然拥有该成员
- @interface Staff : Person
- {
- @public
- NSString * _nickname;
-
- }
- //Xcode4.4后,@property也包含了原本@synthesize的功能
- //生成getter与setter的声明及实现,若无此成员变量,还默认生成private的以_开头的成员变量
- @property double salary;
- @property NSString *position;
- @end
- @implementation Staff
- {
- double _salary;//implementation中声明的默认为private
-
- @public
- int _staffNo;
- }
- //若无声明此成员,则自动生成
- @synthesize position=_position;
- @end
-
- int main(int argc, const char * argv[])
- {
-
- Staff *staff=[Staff new];
- [staff setName:@"Johnny"];
- [staff setSalary:200.0];
- [staff setIsAlive:YES];
- //NSString 创建方式之一
- NSString *str=[NSString stringWithFormat:@"my name is %@ and my salary is %.2f ",[staff name],[staff salary]];
- NSLog(str);
-
- // OC中的点语法,点语法本质是调用getter或setter,编译器碰到点语法,自动根据是否赋值转换成相应的getter或setter
- staff.name=@"Bale";//等价于[staff setName:@"Bale"];
- staff.position=@"manager";
- NSString *str2=[NSString stringWithFormat:
- @"my name is %@ and my salary is %.2f ",
- staff.name,staff.salary]; //等价于[staff salary]
- NSLog(str2);
- }
- /*
- OC中的访问修饰符:
- @public 公用的,都可直接访问
- @protected 本类与其子类中可直接访问
- @private 只能被本类中对象方法直接访问
- @package 同一框架中可直接访问,非同一框架中无法直接访问
- 在interface中声明的成员变量默认是protected
- 在implementation中声明的成员变量,默认是private(在没被他人import的情况下,即使加@public仍然无法被他人引用)
- 关键字@property与@synthesize
- @property 用于生成getter与setter的声明,只能用于interface中 例:@property NSString * name
- @synthesize 用于生成getter与setter的实现,只能用于implementation中 例:@synthesize name = _name (若无_name的成员变量,则自动生成private 的_name成员变量)
- 生成的getter和setter会根据代码中的getter,setter实现情况和成员变量定义情况动态生成缺少的部分,即
- 若getter或setter已经有实现或声明则只生成没实现或没声明的那部分,若有自动生成getter或setter的实现而且
- 成员变量未定义,则自动生成private的_开头的成员变量
- */
复制代码 |
|