小编Juk*_*rpa的帖子

iPhone - dequeueReusableCellWithIdentifier用法

我正在开发一款iPhone应用程序,它有一个非常大的UITableView,其中包含从网络上获取的数据,因此我正在尝试优化其创建和使用.

我发现这dequeueReusableCellWithIdentifier非常有用,但是在看到很多使用它的源代码之后,我想知道我对这个函数的用法是不是很好.

这是人们通常做的事情:

UITableViewCell* cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];

if (cell == nil) {
  cell = [[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:@"Cell"];

// Add elements to the cell
return cell;
Run Code Online (Sandbox Code Playgroud)

这就是我做的方式:

// The cell row
NSString identifier = [NSString stringWithFormat:@"Cell %d", indexPath.row]; 

UITableViewCell* cell = [tableView dequeueReusableCellWithIdentifier:identifier];

if (cell != nil)
  return cell;

cell = [[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:identifier];
// Add elements to the cell
return cell;
Run Code Online (Sandbox Code Playgroud)

不同之处在于人们对每个单元使用相同的标识符,因此只出列一个标识符可以避免分配新标识符.

对我来说,排队的重点是给每个单元格一个唯一的标识符,所以当应用程序要求它已经显示的单元格时,既不需要进行分配也不进行元素添加.

很好,我不知道哪个是最好的,"常用"方法将表的内存使用量提升到它显示的确切数量的单元格,而我使用的方法似乎有利于速度,因为它保留所有计算的单元格,但可能导致大内存消耗(除非队列有内部限制).

我这样用它错了吗?或者仅仅取决于开发人员,取决于他的需求?

iphone optimization objective-c uitableview

61
推荐指数
3
解决办法
7万
查看次数

动画直到UI更新或触摸事件才开始

我有一个奇怪的问题AlphaAnimation.它应该在AsyncTask调用处理程序时重复运行.

但是,第一次调用处理程序时Activity,除非我触摸屏幕或更新UI(例如按下手机的菜单按钮),否则动画将无法启动.

奇怪的是,一旦动画至少运行一次,如果再次调用处理程序,它将毫无问题地启动.

这是代码的样子:

// AsyncTask handler
public void onNetworkEvent()
{
  this.runOnUiThread(new Runnable() {
    @Override
    public void run()
    {
      flashScreen(Animation.INFINITE);
    }
  });
}

// Called method
private void flashScreen(int repeatCount)
{
  final View flashView = this.findViewById(R.id.mainMenuFlashView);

  AlphaAnimation alphaAnimation = new AlphaAnimation(1, 0);
  alphaAnimation.setRepeatCount(repeatCount);
  alphaAnimation.setRepeatMode(Animation.RESTART);
  alphaAnimation.setDuration(300);
  alphaAnimation.setInterpolator(new DecelerateInterpolator());
  alphaAnimation.setAnimationListener(new Animation.AnimationListener() {
    @Override
    public void onAnimationStart(Animation animation)
    {
      flashView.setVisibility(View.VISIBLE);
    }

    @Override
    public void onAnimationEnd(Animation animation)
    {
      flashView.setVisibility(View.GONE);
    }

    @Override
    public void onAnimationRepeat(Animation animation) { }
  }); …
Run Code Online (Sandbox Code Playgroud)

android android-ui android-animation

27
推荐指数
2
解决办法
2万
查看次数

在iOS 5上使用Segues/Storyboard弹出当前视图

我正在使用iOS 5 SDK创建一个应用程序.我设法使用Storyboard的Segues推送视图,但我找不到弹出当前视图并返回上一个视图的正确方法.

我没有使用任何navigationController(该应用程序没有任何顶部或底部栏).

我不认为使用modal或push segue是另一种方式,因为它实例化一个新的控制器.

我是否必须使用相反动画的自定义Segue并在最后删除视图?或者,还有更好的方法 ?

ios ios5 uistoryboard segue

17
推荐指数
3
解决办法
4万
查看次数

Google Place Details API中的语言不一致

我在我的服务器上使用Google Place Details API来存储有关某个地点的信息,使用placeId客户端发送的信息.

我面临着关于结果语言的问题,即使在查询中指定语言时,该地点是城市或该城市的地址也会有所不同.例如:

  • 地方ID ChIJ53USP0nBhkcRjQ50xhPN_zw是米兰市,API返回Milan地点和Lombardy行政区域(英文名称)

  • 地点ID EjBWaWEgZGVsbGEgU3BpZ2EsIE1pbGFuLCBQcm92aW5jZSBvZiBNaWxhbiwgSXRhbHk是米兰的一条街道,API返回Milano为地点和Lombardia行政区域(意大利名称)

为了使它更奇怪,两个搜索都返回Italy到国家.这是API的预期行为吗?

google-maps localization google-places-api

16
推荐指数
1
解决办法
7185
查看次数

布局中其他视图隐藏的材质波纹效果

我在a上添加了一个涟漪效果ImageButton,但它被ImageView用作父视图的背景隐藏RelativeLayout.

这是布局文件:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                xmlns:tools="http://schemas.android.com/tools"
                android:layout_width="match_parent"
                android:layout_height="172dp"
                android:orientation="vertical"
                android:theme="@style/ThemeOverlay.AppCompat.Dark">

    <ImageView
        android:id="@+id/drawerBackgroundImageView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scaleType="centerCrop"
        android:src="@drawable/drawer_background"/>

    [...]

    <ImageButton
        android:id="@+id/drawerLogoutButton"
        android:layout_width="32dp"
        android:layout_height="32dp"
        android:layout_alignBottom="@id/drawerEmailTextView"
        android:layout_alignParentEnd="true"
        android:layout_alignParentRight="true"
        android:layout_marginEnd="@dimen/activity_horizontal_margin"
        android:layout_marginRight="@dimen/activity_horizontal_margin"
        style="@style/FlatButtonStyle"
        android:scaleType="centerInside"
        android:src="@drawable/ic_logout_white_24dp"/>

</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

(还有很多其他观点,但它们在这里无关紧要)

我正在使用an ImageView作为背景,RelativeLayout因为我需要scaleType为图像设置一个特定的,所以我不能使用基本android:background属性.

涟漪效果是隐藏的,因为它没有遮罩层(我希望它延伸出按钮的边界),因此使用ImageButton的父视图显示.如果我删除,效果是完全可见的ImageView.

有没有办法让涟漪效果显示在问题之上ImageView

android android-layout material-design rippledrawable

15
推荐指数
3
解决办法
6553
查看次数

jQuery UI Datepicker - 能够选择日或月

我想知道是否有任何方法可以在jQuery UI中选择一个月,Datepicker同时仍然可以选择一天.

我试图通过在页面加载后onClick向标题添加一个事件来"黑客"它div,但是切换几个月似乎完全取代了div,从而失去了onClick.

还有其他解决方案吗?或者可能是提供此选项的替代方案?

php jquery jquery-ui jquery-ui-datepicker

10
推荐指数
1
解决办法
561
查看次数

获取一个std :: thread来分离并终止自身

我目前正在开发一个基本的线程池.我使用了c ++ 11 std::thread,以及std::condition_variablestd::unique_lock.它似乎工作,我现在希望能够杀死一些线程,当太多的线程不活动时.现在,他们的工作是通过给定std::queueboost::function秒.我想添加一堆空boost::function的,所以线程知道他们必须退出循环.线程的循环是这样的:

void    ThreadPool::threadLoop()
{
  boost::function<void ()>      oThreadTask;
  std::unique_lock<std::mutex>  oLock(m_oTaskMutex);

  while (1)
    {
      // m_oCV is a static std::condition_variable
      // m_oTaskQueue is a static std::queue< boost::function<void ()> >
      m_oCV.wait(oLock, [](){ return m_oTaskQueue.size(); });
      oThreadTask = m_oTaskQueue.front();
      m_oTaskQueue.pop();
      m_oTaskMutex.unlock();
      if (oThreadTask.empty())
        break ;
      oThreadTask();
    }
  // ??
}
Run Code Online (Sandbox Code Playgroud)

问题是,一旦我退出循环,我不确定如何正确分离线程.寻找线程的句柄是否干净(我可以访问a std::list<std::thread*>,并且可以比较它们的ID std::this_thread::get_id()),detach()从线程本身调用是否安全,甚至join()

c++ multithreading

8
推荐指数
1
解决办法
1万
查看次数

将图像资源加载为RGB 565

我正在尝试降低我的应用程序的内存使用量,我注意到它的大部分是由活动的背景引起的:在XHDPI中,720*1280*4 =每个3.6Mbytes,Android似乎没有将它们释放为他们不再使用了.

有没有办法告诉Android加载某些资源图像RGB 565而不是RGB 8888为了在没有alpha通道的情况下在那些较大的图像上保存一些内存?

我知道这可以通过编程方式完成,但我想知道是否也可以使用活动布局中使用的图像和背景来完成setBackgroundResource().

rgb android memory-management image

7
推荐指数
1
解决办法
5869
查看次数

在列表的每个元素之前插入元素

我想在列表的每个现有元素之前插入一个常量元素,即来自:

['foo', 'bar', 'baz']
Run Code Online (Sandbox Code Playgroud)

至:

['a', 'foo', 'a', 'bar', 'a', 'baz']
Run Code Online (Sandbox Code Playgroud)

我尝试过使用列表推导,但我能做到的最好的事情就是使用这个语句的数组数组:

[['a', elt] for elt in stuff]
Run Code Online (Sandbox Code Playgroud)

结果如下:

[['a', 'foo'], ['a', 'bar'], ['a', 'baz']]
Run Code Online (Sandbox Code Playgroud)

所以不完全是我想要的.可以使用列表理解来实现吗?万一重要,我使用的是Python 3.5.

python list-comprehension list python-3.x

5
推荐指数
1
解决办法
1068
查看次数

在 MapBox Android 中检测运动的完全结束

我希望在 MapBox 的 Android SDK 中检测地图运动的完全结束。我所说的完全结束是指不再有用户交互(触摸)和相机移动(触摸移动或快速惯性)。

由于 SDK 中没有此类回调,因此我在 , 上组合了两个侦听器MapViewOnTouchListener如下OnMapChangedListener所示(在 Kotlin 中,但非常清楚):

mapView.setOnTouchListener { _, event ->
    when (event.actionMasked) {
        MotionEvent.ACTION_DOWN -> {
            listener?.onMapDragBegin()
        }
        MotionEvent.ACTION_UP -> {
            listener?.onMapDragEnd()
        }
    }
    false
}

mapView.addOnMapChangedListener { c ->
    when (c) {
        MapView.REGION_WILL_CHANGE, MapView.REGION_WILL_CHANGE_ANIMATED -> {
            listener?.onMapMovementBegin()
        }
        MapView.REGION_DID_CHANGE, MapView.REGION_DID_CHANGE_ANIMATED -> {
            listener?.onMapMovementEnd()
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

侦听器等待两个事件结束。除了一个微小的细节之外,这种方法工作得很好:当用户停止触摸屏幕时,两个结束事件都会被发送,并且只有在地图REGION_WILL_CHANGE_ANIMATED更改之后才会被调用。所以有时候我不知道地图是否还在移动。在日志中看起来像这样:

19:23:42.431: Map touch started
19:23:42.537: Map region change started
19:23:42.538: Map region change ended
...
19:23:42.570: …
Run Code Online (Sandbox Code Playgroud)

android mapbox

5
推荐指数
1
解决办法
2300
查看次数