objective-c 有感

1. 在objective-c中使用#import<>导入系统头文件,#import""导入用户头文件,#import可以保证头文件只被包含一次。 
2.  基本数据类型总结 
2.1 基本数据类型分类 
1) 整型 1. 在objective-c中使用#import<>导入系统头文件,#import""导入用户头文件,#import可以保证头文件只被包含一次。 
2.  基本数据类型总结 
2.1 基本数据类型分类 
1) 整型 
    int,short int, long int 
2) 浮点型 
    float, double 
3) 字符型 
    char 
2.2 数据输出格式: 
1) int 
输出格式符:%i, %d, %o, %x 
   unsigned int 
输出格式符:%u 
   short 
输出格式符:%hi, %hd 
   unsigned short int 
输出格式符:%hu 
   long int 
输出格式符: %li, %ld 
   unsigned long int 
输出格式符:%lu 
2) float,double 
输出格式符:%f, %e, %g 
   long double 
输出格式符: %lf 
3) char 
输出格式符:%c,字符串为%s 
3. 语句 
 循环语句:for, while, do while, break, continue 
 分支:if, else, switch 
4. NSlog()函数:与printf()类似,向控制台输出信息。但它增加了时间戳等一些特性。 
例:向控制台输出hello world。 
   NSString *str = @"hello world"; 
   NSLog(@"%@", str); 
   %@表示输出NSString类型; 
   双引号的前面的@表示这双引号中的字符串应该作为cocoa的NSString元素来处理。 
5. 布尔类型BOOL:值为YES,NO; 
6. objective-c中的方括号: 
1) 用于通知某个对象该做什么。 
2) 方括号内第一项是对象,其余部分是你需要对象执行的操作。 
3) 在objective-c中通知对象执行某种操作,称为发送消息。(也叫调用方法) 
7. 标识符id:是一种泛型,用于表示任何种类的对象。 
8. 类声明@interface: 
例: 
@interface Circle:NSObject  
//为Circle类定义接口;NSObject表示是父类。 
{//以下是数据成员 
   ShapeColor fillColor; 
   ShapeRect bounds; 

//以下是方法声明 
-(void) setFillColor: (ShapeColor) fillColor;  //前面的短线表明这是方法声明 
                                   //短线后面是方法的返回类型 
                                   //接着是方法名 
//冒号后面是参数,其中(ShapeColor)是参数类型, 
fillColor是参数名 
-(void) setBounds:(ShapeRect) bounds; 
-(void) draw; 
//减号就是普通函数 
加号就是静态函数 
@end     //结束声明 
9. self,隐藏对象self对应于C中的this。 
   Self->fillcolor来访问成员变量。 
10. 调用写好的类和类函数: 
//创建新对象,使用缺省初始化函数 
    Bank *bankDefault = [[Bank alloc] init]; 
//调用方法: 
    [bank addAmount: 1]; 
    [bank print]; 
// 释放对象: 
    [bankDefault free]; 
11. 两个参数的方法: 
-(void) setTire: (Tire *) tire  //声明 
      atIndex: (int) index; 
//使用 
[car setTire:tire atIndex:2]; 
objective-c高级特性: 
12. 继承 
Objective-c不支持多继承。 
Super 关键字:调用该类的父类; 
超类:父类的另一种说法。 
12. 自定义NSLog()输出: 
在类中添加description方法就可以自定义NSLog()如何输出对象。 
@implementation Tire 
-(NSString *) description 

   Return (@”I am a tire.”); 

Main() 

    NSLog(@”%@”,tire[0]); 

13. Foundation kit: 
Cocoa是由两部分框架组成的:foundation kit [包括一些基础类]和 application kit.【包括用户接口对象和高级类】 
创建字符串: 
1) NSString *test; 
test=[NSString stringWithFormat:@"i'm %d years old!",23]; 
若在声明方法时在方法前面添加了加号,那就表示把这个方法定义为类方法【这个方法属于类对象,而不是类的实例对象。 
NSArray类:可以存放任意类型的对象. 
它有两个限制: 
1. 它只能存储objective-c的对象,但不能存储C中的基本数据类型,如int , float, enum, struct等。 
2.不能存储nil(对象的零值或NULL值);【因为在创建NSArray时,要在列表结尾添加nil代表列表结束。】 
2) 创建NSArray: 
NSArray *array; 
array=[NSArray arrayWithObjects:@"one",@"two",nil];  
NSString, NSMutableString类; 
NSString是不可变的,即一旦创建完成,就不能通过删除字符或添加字符的方式来改变它; 
而NSMutableString是可变的。 
NSArray, NSMutableArray类; 
NSEnumerator枚举; 
NSEnumerator *enum; 
enum=[array objectEnumerator]; 
Id thingie; 
While(thingie=[enumerator nextObject]){} 
NSDictionary:字典(关键字及其定义的集合。)【也成为散列表,关联数组】,NSMutableDictionary类; 
NSNumber:用来包装基本数据类型,如int ,char, float, bool;【将一个基本类型的数据包装成对象叫做装箱。】 
NSValue:它可以包装任何类,NSNumber是它的子类。 
NSNull: 
 在cocoa中看到“CF”字样时,就表示它是苹果公司的Core Foundation 框架相关的内容。 
 NSAutoreleasePool:自动释放内存池。 
4. 内存管理 
每个对象都有一个与之关联的引用计数(也叫保留计数) 
当使用alloc, new 方法或通过 copy消息(生成接收对象的一个副本)创建一个对象时,对象的引用计数值被设为1; 
 给对象发retain消息时,增加该值; 
 发送release消息时,减少该值; 
当一个对象的引用计数值变为0时,objective-c会自动向对象发送一条dealloc消息。销毁该对象。 
你可以在自己的对象中重写该方法, 
使用retainCount消息,可以获取引用计数器的值。 
-(id) retain; 
-(void) release; 
-(unsigned) retainCount;     
自动释放池:autorelease pool; 
创建: 
NSAutoreleasePool *pool; 
pool=[[NSAutoreleasePool alloc] init]; 
销毁: 
[pool release]; 
注意:xcode自动生成的代码,销毁pool池时,使用的是[pool drain],drain方法只是清空释放池,但不销毁pool.所以在自己编写代码时还是使用 
release. 
而且,drain只适用于MAC OS 10.4以上的版本,而release适用于所有版本。 
只有在向某个对象发送autorelease消息时,该对象才会添加到NSAutoreleasepool中,才会被自动释放。 
如:[car autorelease]; 
内存管理黄金准则: 
只有通过alloc, new和 copy方法创建的对象,才需要程序员负责向该对象发送release或autorelease消息。 
而通过其他方法获得的对象,则默认为已经被设置为自动释放,所以不需要程序员做任何操作了。 
在objective-c 2.0中有垃圾回收机制, 
如果要对某个项目使用垃圾回收: 
项目信息--build选项卡--查询"garb",出现“objective-c Garbage Collection”,将其值设置为“required[-fobjc-gc-only]” 
启用垃圾回收后,通常的内存管理命令全都变成了空操作指令,不执行任何操作。 
开发iphone软件,不能使用垃圾回收。 
5.         
对象初始化 
两种创建新对象的方法: 
[类名 new] 
[[类名 alloc] init] 
这两种方法是等价的,但cocoa的惯例是使用后者。 
alloc在为对象分配空间的同时,将这块内存初始化为0; 
Init方法:初始化实例变量,使对象处于可用状态。[返回类型为id,  返回的值描述了被初始化的对象] 
使用new创建新对象时,系统要完成两个步骤: 
1.  为对象分配内存,即对象获得一个用来存放其实例变量的内存块; 
2.  自动调用init方法,让该对象处于可用状态。 
6.     
objective-c 2.0的新特性【只适用于mac os x10.5及以上】 
@property :表示声明了对象的属性。这样就不用再写属性的访问器了。 
(他有copy, retain, readwrite, readonly等属性) 
@synthesize:表示“创建该属性的访问器” 
点表达式 
7.     
类别 
类别(category)是一种为现有的类添加新方法的方式。 
类别的声明: 
@interface NSString
(NumberConvenience) //类名 (类别名) 
-(NSNumber) lengthAsNumber;            //扩充方法声明 
@end 
使用时使用原来的类名,就可以调用他的所有类别中的方法。 
类别的局限性: 
1.    不能向类中添加新的实例变量; 
2.    在类别中的方法若与类中现有的方法重名,则类中的方法不可用,被类别中的新方法取代。 
类别的作用: 
1.    将类的实现分散到多个文件或框架中; 
2.    创建对私有方法的前向引用; 
【Cocoa中没有真正的私有方法,则实现私有方法类似功能的方法为: 
先在类别中声明方法;然后到现有类的实现中实现该方法。 
这样这个类中的其他方法可以使用该方法,而其他外部的类就不会知道该方法的存在了。】 
3.    向对象添加非正式协议。 
【创建一个NSObject的类别称为创建一个非正式协议。】 
委托delegate是一种对象,另一个类的对象会要求委托对象执行它的某些操作。 
受委托对象在某个时间(某个事件触发)时,会自动通知委托对象执行委托方法。 
选择器:@selector():选择器只是一个方法名称,但它以objective-c运行时使用的特殊方式编码,以快速执行查询。圆括号中的内容是方法名。 
所以Car类的setEngine:方法的选择器是:@selector(setEngine: 
受委托对象如何知道其委托对象是否能处理它(受委托对象)发送给它(委托对象)的消息? 
通过选择器,受委托对象先检查委托对象,询问其是否能响应该选择器。如果能,则向它发送消息。 
8.     
协议: 
正式协议是一个命名的方法列表。 
采用协议意味着必须实现该协议的所有方法。否则,编译器会发出警告。 
正式协议就像JAVA中的接口一样。 
声明协议: 
@protocal NSCopying 
-(id) copywithzone:(NSZone *) zone; //方法列表 
@end 
采用协议: 
@interface Car:NSObject
<NSCopying,NSCoding> //中括号中是要实现的协议列表 
{//实例变量列表} 
//方法列表 
@end 
    int,short int, long int 
2) 浮点型 
    float, double 
3) 字符型 
    char 
2.2 数据输出格式: 
1) int 
输出格式符:%i, %d, %o, %x 
   unsigned int 
输出格式符:%u 
   short 
输出格式符:%hi, %hd 
   unsigned short int 
输出格式符:%hu 
   long int 
输出格式符: %li, %ld 
   unsigned long int 
输出格式符:%lu 
2) float,double 
输出格式符:%f, %e, %g 
   long double 
输出格式符: %lf 
3) char 
输出格式符:%c,字符串为%s 
3. 语句 
 循环语句:for, while, do while, break, continue 
 分支:if, else, switch 
4. NSlog()函数:与printf()类似,向控制台输出信息。但它增加了时间戳等一些特性。 
例:向控制台输出hello world。 
   NSString *str = @"hello world"; 
   NSLog(@"%@", str); 
   %@表示输出NSString类型; 
   双引号的前面的@表示这双引号中的字符串应该作为cocoa的NSString元素来处理。 
5. 布尔类型BOOL:值为YES,NO; 
6. objective-c中的方括号: 
1) 用于通知某个对象该做什么。 
2) 方括号内第一项是对象,其余部分是你需要对象执行的操作。 
3) 在objective-c中通知对象执行某种操作,称为发送消息。(也叫调用方法) 
7. 标识符id:是一种泛型,用于表示任何种类的对象。 
8. 类声明@interface: 
例: 
@interface Circle:NSObject  
//为Circle类定义接口;NSObject表示是父类。 
{//以下是数据成员 
   ShapeColor fillColor; 
   ShapeRect bounds; 

//以下是方法声明 
-(void) setFillColor: (ShapeColor) fillColor;  //前面的短线表明这是方法声明 
                                   //短线后面是方法的返回类型 
                                   //接着是方法名 
//冒号后面是参数,其中(ShapeColor)是参数类型, 
fillColor是参数名 
-(void) setBounds:(ShapeRect) bounds; 
-(void) draw; 
//减号就是普通函数 
加号就是静态函数 
@end     //结束声明 
9. self,隐藏对象self对应于C中的this。 
   Self->fillcolor来访问成员变量。 
10. 调用写好的类和类函数: 
//创建新对象,使用缺省初始化函数 
    Bank *bankDefault = [[Bank alloc] init]; 
//调用方法: 
    [bank addAmount: 1]; 
    [bank print]; 
// 释放对象: 
    [bankDefault free]; 
11. 两个参数的方法: 
-(void) setTire: (Tire *) tire  //声明 
      atIndex: (int) index; 
//使用 
[car setTire:tire atIndex:2]; 
objective-c高级特性: 
12. 继承 
Objective-c不支持多继承。 
Super 关键字:调用该类的父类; 
超类:父类的另一种说法。 
12. 自定义NSLog()输出: 
在类中添加description方法就可以自定义NSLog()如何输出对象。 
@implementation Tire 
-(NSString *) description 

   Return (@”I am a tire.”); 

Main() 

    NSLog(@”%@”,tire[0]); 

13. Foundation kit: 
Cocoa是由两部分框架组成的:foundation kit [包括一些基础类]和 application kit.【包括用户接口对象和高级类】 
创建字符串: 
1) NSString *test; 
test=[NSString stringWithFormat:@"i'm %d years old!",23]; 
若在声明方法时在方法前面添加了加号,那就表示把这个方法定义为类方法【这个方法属于类对象,而不是类的实例对象。 
NSArray类:可以存放任意类型的对象. 
它有两个限制: 
1. 它只能存储objective-c的对象,但不能存储C中的基本数据类型,如int , float, enum, struct等。 
2.不能存储nil(对象的零值或NULL值);【因为在创建NSArray时,要在列表结尾添加nil代表列表结束。】 
2) 创建NSArray: 
NSArray *array; 
array=[NSArray arrayWithObjects:@"one",@"two",nil];  
NSString, NSMutableString类; 
NSString是不可变的,即一旦创建完成,就不能通过删除字符或添加字符的方式来改变它; 
而NSMutableString是可变的。 
NSArray, NSMutableArray类; 
NSEnumerator枚举; 
NSEnumerator *enum; 
enum=[array objectEnumerator]; 
Id thingie; 
While(thingie=[enumerator nextObject]){} 
NSDictionary:字典(关键字及其定义的集合。)【也成为散列表,关联数组】,NSMutableDictionary类; 
NSNumber:用来包装基本数据类型,如int ,char, float, bool;【将一个基本类型的数据包装成对象叫做装箱。】 
NSValue:它可以包装任何类,NSNumber是它的子类。 
NSNull: 
 在cocoa中看到“CF”字样时,就表示它是苹果公司的Core Foundation 框架相关的内容。 
 NSAutoreleasePool:自动释放内存池。 
4. 内存管理 
每个对象都有一个与之关联的引用计数(也叫保留计数) 
当使用alloc, new 方法或通过 copy消息(生成接收对象的一个副本)创建一个对象时,对象的引用计数值被设为1; 
 给对象发retain消息时,增加该值; 
 发送release消息时,减少该值; 
当一个对象的引用计数值变为0时,objective-c会自动向对象发送一条dealloc消息。销毁该对象。 
你可以在自己的对象中重写该方法, 
使用retainCount消息,可以获取引用计数器的值。 
-(id) retain; 
-(void) release; 
-(unsigned) retainCount;     
自动释放池:autorelease pool; 
创建: 
NSAutoreleasePool *pool; 
pool=[[NSAutoreleasePool alloc] init]; 
销毁: 
[pool release]; 
注意:xcode自动生成的代码,销毁pool池时,使用的是[pool drain],drain方法只是清空释放池,但不销毁pool.所以在自己编写代码时还是使用 
release. 
而且,drain只适用于MAC OS 10.4以上的版本,而release适用于所有版本。 
只有在向某个对象发送autorelease消息时,该对象才会添加到NSAutoreleasepool中,才会被自动释放。 
如:[car autorelease]; 
内存管理黄金准则: 
只有通过alloc, new和 copy方法创建的对象,才需要程序员负责向该对象发送release或autorelease消息。 
而通过其他方法获得的对象,则默认为已经被设置为自动释放,所以不需要程序员做任何操作了。 
在objective-c 2.0中有垃圾回收机制, 
如果要对某个项目使用垃圾回收: 
项目信息--build选项卡--查询"garb",出现“objective-c Garbage Collection”,将其值设置为“required[-fobjc-gc-only]” 
启用垃圾回收后,通常的内存管理命令全都变成了空操作指令,不执行任何操作。 
开发iphone软件,不能使用垃圾回收。 
5.         
对象初始化 
两种创建新对象的方法: 
[类名 new] 
[[类名 alloc] init] 
这两种方法是等价的,但cocoa的惯例是使用后者。 
alloc在为对象分配空间的同时,将这块内存初始化为0; 
Init方法:初始化实例变量,使对象处于可用状态。[返回类型为id,  返回的值描述了被初始化的对象] 
使用new创建新对象时,系统要完成两个步骤: 
1.  为对象分配内存,即对象获得一个用来存放其实例变量的内存块; 
2.  自动调用init方法,让该对象处于可用状态。 
6.     
objective-c 2.0的新特性【只适用于mac os x10.5及以上】 
@property :表示声明了对象的属性。这样就不用再写属性的访问器了。 
(他有copy, retain, readwrite, readonly等属性) 
@synthesize:表示“创建该属性的访问器” 
点表达式 
7.     
类别 
类别(category)是一种为现有的类添加新方法的方式。 
类别的声明: 
@interface NSString
(NumberConvenience) //类名 (类别名) 
-(NSNumber) lengthAsNumber;            //扩充方法声明 
@end 
使用时使用原来的类名,就可以调用他的所有类别中的方法。 
类别的局限性: 
1.    不能向类中添加新的实例变量; 
2.    在类别中的方法若与类中现有的方法重名,则类中的方法不可用,被类别中的新方法取代。 
类别的作用: 
1.    将类的实现分散到多个文件或框架中; 
2.    创建对私有方法的前向引用; 
【Cocoa中没有真正的私有方法,则实现私有方法类似功能的方法为: 
先在类别中声明方法;然后到现有类的实现中实现该方法。 
这样这个类中的其他方法可以使用该方法,而其他外部的类就不会知道该方法的存在了。】 
3.    向对象添加非正式协议。 
【创建一个NSObject的类别称为创建一个非正式协议。】 
委托delegate是一种对象,另一个类的对象会要求委托对象执行它的某些操作。 
受委托对象在某个时间(某个事件触发)时,会自动通知委托对象执行委托方法。 
选择器:@selector():选择器只是一个方法名称,但它以objective-c运行时使用的特殊方式编码,以快速执行查询。圆括号中的内容是方法名。 
所以Car类的setEngine:方法的选择器是:@selector(setEngine: 
受委托对象如何知道其委托对象是否能处理它(受委托对象)发送给它(委托对象)的消息? 
通过选择器,受委托对象先检查委托对象,询问其是否能响应该选择器。如果能,则向它发送消息。 
8.     
协议: 
正式协议是一个命名的方法列表。 
采用协议意味着必须实现该协议的所有方法。否则,编译器会发出警告。 
正式协议就像JAVA中的接口一样。 
声明协议: 
@protocal NSCopying 
-(id) copywithzone:(NSZone *) zone; //方法列表 
@end 
采用协议: 
@interface Car:NSObject
<NSCopying,NSCoding> //中括号中是要实现的协议列表 
{//实例变量列表} 
//方法列表 
@end 

时间: 2024-09-10 04:50:04

objective-c 有感的相关文章

建站五年有感,给年轻站长的忠告

建站五年有感,给年轻站长的忠告 建站多年,会有许多的经验和心得,以下的心得是给新手站长非常好的告诫. 1.努力 做网站是苦差事,要努力,有人说建站是it民工,吃的比羊还差,睡的比小姐还晚,随随便便过日子过四五年也是过,稍微努力的过四五年也是过,努力的过四五年也是过,何不努力好好的干.如果努力的过好毕业后的四五年,这对我们以后的人生非常有帮助. 2.虚心学习 多与比自己流量大的人站长/成功人士交流学习,要虚心听取/认真分析他们的意见和建议,以免自己以后走弯路. 他们的经验,他们的思路,他们的教训是

我是仆街站长——百度搜索引擎有感

--百度搜索引擎有感. 我有一个小站,小站真的很小,小到数据库压缩后不到10M. 我很懒,懒到从不做搜索优化,甚至连关键字我都懒得填. 当然,综合以上2条,我的站也很扑,没错,我就是一个不合格的仆街站长. 但我感觉我前途无量! 因为我从不投垃圾广告. 因为我从不用弹窗广告. 因为我从不用交换链接(除265). 因为我从不用采集. 因为我站的内容基本原创. 因为我的网站稳定快速.(只用名牌主机的成果) 当然最主要的我感觉,百度对我很好:) 咳咳,自从去年年度,我不小心闯入站长这个圈圈以来,我就被深

用Dojo Objective Harness对Web 2.0应用程序进行单元测试

单元测试是保证软件开发质量的一个重要部分,对于敏捷和极限编程开发方法尤其如此.通常,对 Web 2.0 客户端用户界面进行自动的单元测试很困难,所以很少有人去做尝试.然而,Dojo 提供了一个单元测试工具,借此可以评估 JavaScript 的功能及用户界面的可视性.经过这个工具彻底测试过的用户界面最终包含的 Bug 数量会极大的减少.本文阐述了 Dojo Objective Harness (DOH) 的主要特点并通过与其它 Web 2.0 应用程序测试工具的比较展示了其强大的功能. 单元测试

Objective C从远程url下载图片方法汇总

  本文给大家分享了2则使用Objective C从远程url下载图片的方法,都是个人项目中使用的,汇总下推荐给大家,有需要的小伙伴可以参考下. Objective C从远程url下载图片 ? 1 2 3 4 5 6 7 8 - (UIImage *) getImageFromURL: (NSString *)theURL { UIImage *theImage = NULL; NSString *imageFileName = [BT_strings getFileNameFromURL:th

iPhone objective c 截屏代码

  objective c 截屏代码 -(void)save{ UIGraphicsBeginImageContext(mybackgroundview.bounds.size); //currentView 当前的view [mybackgroundview.layer renderInContext:UIGraphicsGetCurrentContext()]; UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();

有感 Visual Studio 2015 RTM 简介 - 八年后回归 Dot Net,终于迎来了 Mvc 时代,盼走了 Web 窗体时代

有感 Visual Studio 2015 RTM 简介 - 八年后回归 Dot Net,终于迎来了 Mvc 时代,盼走了 Web 窗体时代 太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. 关于

IOS-Swift、Objective-C、C++混合编程

1.Objective-C调用C++代码 后缀为m文件的是Objective-C的执行文件,而后缀为mm文件的是Objective-C++文件. 直接在Objective-C中是无法调用C++代码的,所以如果需要在Objective-C调用C++语言就需要直接将后缀m文件改为mm,然后就可以调用C++代码了. Objective-C兼容C,Objective-C++兼容C.C++. 接下来是在OC工程中创建C++文件,并调用C++的代码: 然后在OC文件中直接用C++的语法调用C++,所以前提是

读《应试教育的死穴,恰在于堵死了孩子“犯错”的空间》有感

读<应试教育的死穴,恰在于堵死了孩子"犯错"的空间>有感          "科技创新带来的利润最高,同时在生产要素(资源.能源.劳动力)已经达到极限的时候,中国要想发展只能依靠创新."          最新看了一篇文章---<应试教育的死穴,恰在于堵死了孩子"犯错"的空间>,联系到笔者上周参加了一个"龙芯"负责人胡伟武的参与交流会(议题是:"中国制造之自主CPU发展道路-兼谈龙芯工作体会&

读后有感 - 残忍但诚实的忠告:您没钱,就不要掺和这事了

读后有感 - 残忍但诚实的忠告:您没钱,就不要掺和这事了 太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. 人民日报微信公众号该文原链接 对于此文,本人没有任何感想,处于五感抽搐,三观沉浮的游离状

《UCD火花集2:有效的互联网产品设计 交互/信息设计 用户研究讨论》一17.3 过年回家有感:他们的互联网

17.3 过年回家有感:他们的互联网 UCD火花集2:有效的互联网产品设计 交互/信息设计 用户研究讨论 文/李杰 这次从北京这个可以算是中国互联网最发达的城市回到温州农村的老家,看到了爸爸妈妈,弟弟妹妹们是怎样用互联网的,让我这个做互联网产品的很受触动. 因为家里有不少亲戚在国外打工,QQ视频成了妈妈要开通宽带的唯一动力.以前都是我们过年回家再自己去开个假期宽带,这一次妈妈为了QQ视频主动提前去办理了宽带包年.对于从来没独立操作过电脑的爸妈们来说,学会开电脑,用鼠标双击企鹅图标,在打开的窗口中