0%

interface中的声明(.h文件):

-(void)setSId:(int)i andscore:(float) s;
//带参数名
-(void)set:(int) i:(float)s;
//不带参数名

implementation中的实现方法(.m文件)

-(void)setSId:(int)i andscore:(float)s
{
    sId=i;
    score=s;    
    
}
-(void)set:(int)i :(float)s
{
    sId=i;
    score=s;
}

与Java的区别还是挺大的,带参数名看赶来比较直观. 使用方法:

        [s1 setSId:8 andscore:80];
        [s1 set:5 :68.5];

s1为实例

以Student类为例.该类包含一个int 学生ID,float 分数,以用print 打印方法. Student.h:

#import 

@interface Student : NSObject
{
    int sId;
    float score;
}
@property int sId;
@property float score;
//这两行是关键,把需要封装的属性都加上,相同类型可写在一行
//如果不是基本类型的变量,需要增加copy,nonatomic 参数,如
//@property (copy,nonatomic) NSString * nickname,* email;
//这样使用setter方法会复制值,而不是复制引用

-(void)print;
@end

Student.m:

#import "Student.h"

@implementation Student
-(void) print
{
    NSLog(@"%d  %f",sId,score);
    
}
@synthesize sId,score;
//上面一行是关键
@end

封装后,可以通过下面的方法访问属性: s1为Student的实例 读取属性: [s1 sId]或s1.sId 赋值: s1.sId=10 或[s1 setSId:10] 后面的setSId方法是自动生成的,方法名为set加属性名,但是第一个字母改为大写.

上一篇的代码是把定义的类写在主文件中的,这样的做法明显不合理,如果代码量大,维护赶来很麻烦,现在把类存放在单独的文件中. 假设我这里要创建一个Student类. 在项目点右键,选择New File或者菜单栏 File-New-New File,弹出Choose a template for your new file窗口,左侧选择Cocoa(Mac OS X下),右侧选择 Objective-C class,点Next,输入类名,父类 NSObject,再点Next,选择文件生成路径,这里与main.m放同一目录,再点Create,自动生成Student.h和Student.m两个文件. *.h用于存放@interface部分 *.m用于存放@implementation部分 在main.m中使用该类时,需要在顶部import *.h文件 #import “Student.h”

习惯了Eclipse,习惯了ctrl键,不喜欢用command键,所以自己修改了一下快捷键。对于17.3寸的1080P屏幕来说,Xcode默认的字体有点小,自己改大了一点。为了下次安装Xocde时不再重新设置一遍,可以把这些配置文件保存起来。具体目录: 快捷键配置文件: /Users/用户名/Library/Developer/xcode/UserData/KeyBindings 字体颜色配置文件:/Users/用户名/Library/Developer/xcode/UserData/FontAndColorThemes 只有修改过的配置文件才会保存在这里,默认没改的是没有在这的。 另外,可以使用DoubleCommand這個小软件来把Control改成Command键,安装后在系统偏好设置中设置

入了Kindle DXG,再也没有理由偷懒了,每次说开始学习XXX,都坚持不了几天。刚学Objective-c,有些理解有问题,可能存在错误,文章只是做笔记,并不是教程。该例来自于《Objective-2.0程序设计》。

#import 
//导入头文件

@interface Fraction: NSObject
{
    int numerator,denominator;
    
}
-(void) print;//打印分数
-(void) setNumerator: (int) n;//设置分子
-(void) setDenominator: (int) d;//设置分母
-(void) calculate;//计算成小数并输出
-(int) numerator; //把被除数封装
-(int)denominator;//把除数封装
@end
/*
 声明接口(原书称类,初学,暂时不知是否跟JAVA一样分类和接口),分两部分,上面的是第一部分,声音所有变量及方法
 以@interface开始,@end结束
 Fraction为接口名,冒号表示继承,NSObject是父类
 花括号内声明所有的变量,外面声明方法
 -(返回值类型) 方法名:(参数类型)参数名;    [参数列表]
 开头的负号表示该方法为实例方法(只能由实例调用)
 正号表示该方法为类方法(静态方法?)
 */


@implementation Fraction
-(void) print
{
    NSLog(@"%d/%d=",numerator,denominator);
}
-(void) setNumerator:(int)n
{
    numerator=n;
}
-(void) setDenominator:(int)d
{
    denominator=d;
}
-(void) calculate
{
    float result=(float)numerator/denominator;
    //除法,先转float以保证精度
    NSLog(@"%f",result);
}
-(int) numerator
{
    return numerator;
}
-(int) denominator
{
    return denominator;
}
@end
/*
 第二部分写方法的具体实现,从这里看,感觉没有了类和接口的概念,因为自己实现了所有的方法
 */


int main (int argc, const char * argv[])
{
    
    @autoreleasepool {
        //自动生成的,暂时不管,好象是自动释放内存池,类似于GC
        Fraction *myFraction;
        //定义一个对象,* 表示指针
        myFraction=[Fraction alloc];
        //使用父类的alloc方法请求系统分配内存空间
        myFraction=[myFraction init];
        //使用父类的init方法初始化
        //两行可以合并为   myFraction=[[Fraction alloc] init]; 或myFraction=[Fraction new];
        
        [myFraction setNumerator:1];
        //使用setNumerator方法设置分子
        [myFraction setDenominator:3];
        //使用setDenominator方法设置分母
        
        NSLog(@"The value of myFraction is:");
        [myFraction print];
        //调用print函数
        [myFraction calculate];
        //调用calculate函数
        
        printf("被除数 %d\n",[myFraction denominator]);
        //也可以用printf函数,但不会输出时间之类的其他东西
        
    }
    return 0;
}

书中程序还在程序结束调用了release方法,但在新版的xcode中报错,这是因为4.2以后的xcode加入了Automatic Reference Counting特性,不再需要手动释放内存。

Xcode在编译运行程序时会自动隐藏到下方的Console窗口,看不到程序的输出,很不方便,每次都要按cmd+shift+y重新打开。可以用下面的方法设置一下xcode: Xcode->Preference->Behaviors,看到Run Starts,Run Pauses等等,把右边的debugger with那行全都设成 Show debugger with Console View,并勾上.其他的Build Testing之类的根据自己需要一样的设置。

终于忍不住败了个Kindle DXG,记录常用操作: 播放音乐:Alt+blank,Alt+f 下一曲 TTS阅读:Shift+Sym 恢复出厂设置:按住电源键20秒以上关机,再按住Home键,滑动电源键开机,直到出现画面,松开Home键,输入reset,跳出一进度条,进入Recovery Mode,按R重启 浏览器删除收藏:方向键左 浏览器编辑收藏:方向键右 进debug改地区: 按home键,返回书目,随便输入一个字符,屏幕下载弹出搜索输入框,删除该字符,然后: ;debugOn ~changelocale zh-CN.utf8 ;debugOff 截屏:Alt+Shift+G 图片保存在documents目录中 扫雷游戏:Alt+Shift+m 五子棋:打开扫雷时,按g

int main(int argc,char * argv[]) {

    int a[2][3]={ {5,65,41},{54,54,87}};
    int i,j;
    for(i=0;i<2;i++)
    {
        for(j=0;j<3;j++)
        {
            printf("%d  %d\n",*(a[i]+j),*(*(a+i)+j));
            //两种方式表示
        }
    }

    return 0;
}

在确定没有少分号以后,问了下网友,终于找到出错原因. C程序定义变量必须在函数开头声明部分,不能在非定义变量的代码后面再定义变量,就是说,所有函数要用到的变量,必须在函数开头就先定义. 但这个跟编译器有关,部分网友称在VS2005及VC中都没有问题,我自己在Eclipse+GCC环境下也没报错,估计是VS2010比较严格.

这个是潭浩强的C程序设计上的习题.

#include 

void swap(int *pa,int *pb)
{
    //两个数调换位置
    int temp=0;
    temp=*pa;
    *pa=*pb;
    *pb=temp;

}
void f(int * pa,int * pb,int * pc)
{
    if(*pa>*pb)
        swap(pa,pb);
    if(*pb>*pc)
        swap(pb,pc);
    if(*pa>*pb)
        swap(pa,pb);

}
int main(int argc,char * argv[]) {
    int a,b,c;
    int * pa=&a;
    int * pb=&b;
    int * pc=&c;
    
    printf("请输入三个整数:");
    scanf("%d %d %d",&a,&b,&c);
    printf("您输入的整数为:%d %d %d\n",a,b,c);
    f(pa,pb,pc);
    printf("从小到大排序为:%d %d %d\n",a,b,c);

    return 0;
}