您的位置:首页 > 移动开发 > IOS开发

iOS中使用点语法

2015-07-06 21:23 295 查看
在实际的开发过程中,用点语法,绝对是加快开发过程的一个好帮手,废话不多说,开始上代码

1:在ios中使用点语法必须配置的关键字@property

在ios开发过程中只要有这个关键字的,包括任何类库中的有该词修饰的都可以用点语法使用.看一下具体的语法

@property(nonatomic,retain) NSString *names;


这里写一下括号里的关键字,不做仔细介绍.

nonatomic 是表示非原子性,是原子性的时候则和线程有关...

retain,具体修饰后面的数据

总结如下

nsstring...... 用copy

nsarry.........用strong

uicontrol.....用weak

这一点很重要.

2:帮助我们生产的有哪些东东

用了@property的时候,Xcode会帮助我们生成两端代码

2.1:第一段 @synthesize 属性名 = _属性名,并且生产的变量是@private的,其他类不能查看和访问

2.2:第二段 会对应的生成 getter和setter方法

2.3:注意:在用@property声明变量的时候 不要加下划线.

3:看一下Xcode生产的setter和getter方法

新建一个类

声明变量

.h文件如下

/**
 *  年龄
 */
@property(nonatomic,assign) NSInteger ages;
/**
 *  姓名
 */
@property(nonatomic,retain) NSString *names;

/**
 *  毕业院校
 */
@property(nonatomic,copy) NSString *school;


.m文件如下

@synthesize ages = _ages;
@synthesize names = _names;
@synthesize school = _school;

/**
 *  用nsinter来看set和get方法
 *
 *  @param ages <#ages description#>
 */
- (void)setAges:(NSInteger)ages
{
    _ages = ages;

}

- (NSInteger)ages
{
    return _ages;
}

/**
 *  看retain的get和set方法
 *
 *  @param names <#names description#>
 */
- (void)setNames:(NSString *)names
{
    //判断原值和新值是否相等
    if (_names != names) {
        //如果不一样释放原值
        [_names release];
        //将新值付给原值
        _names = [names retain];
    }
}

- (NSString *)names
{
    return [[_names retain] autorelease];
}

/**
 *  看copy的get和set方法
 *
 *  @param school <#school description#>
 */
- (void)setSchool:(NSString *)school
{
    //判断原值和新值是否相等
    if (_school != school) {
        //如果不一样释放原值
        [_school release];
        //将新值付给原值
        _school = [school copy];
    }
}

- (NSString *)school
{
    return [[_school retain] autorelease];
}
@end


在上面的时候说过用@property修饰过的数据类型会自动生产getter和setter方法,上面就是具体的实现了具体过程的方法.

4:调用

Student *stu = [[Student alloc] init];
    
    stu.names = @"刘伯温";
    stu.schools = @"朱元璋大学";
    
    NSLog(@"%@---%@",stu.names,stu.schools);


在这里就可以用点语法来使用了

5: 用synthesize来重写

5.1在.h文件中声明了一个变量

@property(nonatomic,copy)NSString *juner;
在main.m中调用的时候用点语法就可以出来

Student *stu = [[Student alloc] init];
    
  
    
    stu.juner = @"要重写的变量";
    
    
    NSLog(@"%@---%@",stu.names,stu.schools);


5.2在.m文件中用synthesize重新制定juner的属性生产的变量名

@synthesize sex = _testSex;

然后在写setJuner的时候就要改变了

- (void)setJuner:(NSString *)juner
{
    _testJuners = juner;
}


这样就重新制定了生产的变量名.

6:用kvc的方法

给实列变量赋值

[an setValue:@"230" forKey:@"price"];
    [an setValue:@"好听" forKey:@"voice"];
    //[an setValue:@"340" forKey:@"speed"];
    [an setValue:@(340) forKey:@"speed"];


在上述代码中的第三行speed的变量在.h文件中是没有声明的,这时候就会报错,那怎么解决了

- (void)setValue:(id)value forUndefinedKey:(NSString *)key
{
    NSLog(@"输入的路劲不对,请查看输入的路劲");
}


这就是在获取错误的时候,会抓取异常,不会让程序奔溃了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: