当前位置:  编程技术>移动开发
本页文章导读:
    ▪近来知识点 1        最近知识点 1    今天是个好日子,入住新地方,深夜发帖纪念一下^^     前段时间面试,有些知识点后知后觉,总结一二。   1.delegate和notification的区别?     之前看文档的main difference,.........
    ▪ 程序退出代码片断        程序退出代码片段 Intent intent = new Intent(Intent.ACTION_MAIN); intent.addCategory(Intent.CATEGORY_HOME); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); ......
    ▪ ScrollView内嵌ViewPager导致ViewPager滑动困难有关问题       ScrollView内嵌ViewPager导致ViewPager滑动困难问题 ScrollView内嵌ViewPager导致ViewPager滑动困难问题       解决方式:重写ScrollView,然后在xml中定义布局的时候,使用自定义的PagerScrollView而不是系统.........

[1]近来知识点 1
    来源: 互联网  发布时间: 2014-02-18
最近知识点 1

   今天是个好日子,入住新地方,深夜发帖纪念一下^^

    前段时间面试,有些知识点后知后觉,总结一二。

 

1.delegate和notification的区别?

    之前看文档的main difference,跟我以前想的差不多,它们只是功能上的区别,一对一和一对多:

But there are differences between notification and delegation, and these differences dictate what these mechanisms should be used for. As noted earlier, the main difference between the notification model and the delegation model is that the former is a broadcast mechanism whereas delegation is a one-to-one relationship. Each model has its advantages;

    最近细看文档,其实不然,估计面试时人家想考的就是这个:

But the one-to-one model of delegation has its advantages too. A delegate is given the opportunity to affect an event by returning a value to the delegating object. A notification observer, on the other hand, must play a more passive role; it can affect only itself and its environment in response to the event. Notification methods must have the following signature:

 

- (void)notificationHandlerName:(NSNotification *);

 

This requirement precludes the observing object from affecting the original event in any direct way. A delegate, however, can often affect how the delegating object will handle an event.

    简单来说delegate能affect delegating object,而通知则是发了就发了,啥都没返回。

 

2.property自定义实现?

    我以为只是setter要注意,if判断之后根据property处retain或copy。而getter只是简单的返回变量,其实可能会有问题,据文档描述:

However, there is still a potential danger with this approach. What if a client is using the object returned by the getter accessor and meanwhile the setter accessor autoreleases the old NSString object and then, soon after, that object is released and destroyed? The client object’s reference to the instance variable would no longer be valid.

    乍一看不晓得啥意思,写了代码测试才了解:

- (void)logTitle {
    NSLog(@"title %@",title);
}

- (void)testTitle {
    a = [[ClassA alloc] init];
    
    NSString *str = [[NSString alloc] initWithFormat:@"%d",888];
    a.title = str;
    [str release];
    
    title = a.title; 
            
    [a release];

    [self logTitle];
    [self logTitle];
    //[self performSelector:@selector(logTitle) withObject:nil afterDelay:0];
}

     如上,ClassB的testTitle使用A对象,A内部自定义title的set/get,get是简单返回title变量,当[a release];之后,a会dealloc,从而title被release,此时B调logTitle就会bad_access(调两次是因为title release后并没有立即释放,调第二次才error,跟输出两次retainCount类似,第一次还能输出1,第二次error,其中原因未明),因为B中只是简单把A返回的title赋值给B中的变量。要解决这个问题,要么B把title retain一次,要么用文档的方法,getter返回[[title retain] autorelease]。

 

     至此,OK^^


    
[2] 程序退出代码片断
    来源: 互联网  发布时间: 2014-02-18
程序退出代码片段
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

    
[3] ScrollView内嵌ViewPager导致ViewPager滑动困难有关问题
    来源: 互联网  发布时间: 2014-02-18
ScrollView内嵌ViewPager导致ViewPager滑动困难问题

ScrollView内嵌ViewPager导致ViewPager滑动困难问题

 

    解决方式:重写ScrollView,然后在xml中定义布局的时候,使用自定义的PagerScrollView而不是系统的ScrollView即可。

    重点在于重写父类的onInterceptTouchEvent方法

 

import android.content.Context;
import android.util.AttributeSet;
import android.view.GestureDetector;
import android.view.GestureDetector.SimpleOnGestureListener;
import android.view.MotionEvent;
import android.widget.ScrollView;

public class PagerScrollView extends ScrollView {

	private GestureDetector mGestureDetector;

	public PagerScrollView(Context context, AttributeSet attrs, int defStyle) {
		super(context, attrs, defStyle);
		init();
	}

	public PagerScrollView(Context context) {
		super(context);
		init();
	}

	public PagerScrollView(Context context, AttributeSet attrs) {
		super(context, attrs);
		init();
	}

	private void init() {
		mGestureDetector = new GestureDetector(getContext(),
				new YScrollDetector());
		setFadingEdgeLength(0);
	}

	@Override
	public boolean onInterceptTouchEvent(MotionEvent ev) {
		return super.onInterceptTouchEvent(ev)
				&& mGestureDetector.onTouchEvent(ev);
	}

	private class YScrollDetector extends SimpleOnGestureListener {
		@Override
		public boolean onScroll(MotionEvent e1, MotionEvent e2,
				float distanceX, float distanceY) {
			
			if (Math.abs(distanceY) >= Math.abs(distanceX)) {
				return true;
			}
			return false;
		}
	}
}

 


    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
▪Android实现侦听电池状态显示、电量及充电动...
▪Android获取当前已连接的wifi信号强度的方法
▪Android实现动态显示或隐藏密码输入框的内容
▪根据USER-AGENT判断手机类型并跳转到相应的app...
▪Android Touch事件分发过程详解
▪Android中实现为TextView添加多个可点击的文本
▪Android程序设计之AIDL实例详解
▪Android显式启动与隐式启动Activity的区别介绍
▪Android按钮单击事件的四种常用写法总结
▪Android消息处理机制Looper和Handler详解
▪Android实现Back功能代码片段总结
▪Android实用的代码片段 常用代码总结
▪Android实现弹出键盘的方法
▪Android中通过view方式获取当前Activity的屏幕截...
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3